收藏
回答

公众号模板消息Remark字段最多多少个字符?

公众号模板消息Remark字段最多多少个字符?文档写的20个以内字符,仅支持换行一次

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF

但是银行公众号推送的消息可以发很多个字,难道发的不是模板消息?

回答关注问题邀请回答
收藏

1 个回答

  • CRMEB
    CRMEB
    2022-10-08

    微信模板消息字数详解

      微信公众号都会推送微信文章,我们在写微信文章时都有个模板,这个微信模板消息是有字数限制的,那么这个微信模板消息字数限制是多少呢?来看看今天小编给大家带来的微信模板消息字数详解。

      微信模板消息字数限制为2048

      可以看到,微信接口文档中写的很明确:回复的消息内容长度不超过2048字节。那为什么很多人测试反应消息内容长度在1300多字节时,微信就不响应了呢?我想这问题应该在这部分人没有搞清楚到底该如何计算文本的字节数。

      如何正确计算微信模板消息所占字节数

      计算文本(字符串)所占字节数,大家个想到的应该就是String类的getBytes()方法,该方法返回的是字符串对应的字节数组,再计算数组的length就能够得到字符串所占字节数。例如:

      public static void main(String []args) {

      // 运行结果:4

      System.out.println("柳峰".getBytes().length);

      }

      上面的示例中计算了两个中文所占的字节数为4,即一个汉字占2个字节。真的是这样吗?其实我们忽略了一个问题:对于不同的编码方式,中文所占的字节数也不一样!这到底要怎么呢?在上面的例子中,我们并没有指定编码方式,那么会使用操作系统所默认的编码方式。先来看我得出的三条结论:

      1)如果上面的例子运行在默认编码方式为ISO8859-1的操作系统平台上,计算结果是2;

      2)如果上面的例子运行在默认编码方式为gb2312或gbk的操作系统平台上,计算结果是4;

      3)如果上面的例子运行在默认编码方式为utf-8的操作系统平台上,计算结果是6;

      如果真的是这样,是不是意味着String.getBytes()方法在我们的系统平台上默认采用的是gb2312或gbk编码方式呢?我们再来看一个例子:

      public static void main(String []args) throws UnsupportedEncodingException {

      // 运行结果:2

      System.out.println("柳峰".getBytes("ISO8859-1").length);

      // 运行结果:4

      System.out.println("柳峰".getBytes("GB2312").length);

      // 运行结果:4

      System.out.println("柳峰".getBytes("GBK").length);

      // 运行结果:6

      System.out.println("柳峰".getBytes("UTF-8").length);

      }

      这个例子是不是很好地证明了我上面给出的三条结论呢?也就是说采用ISO8859-1编码方式时,一个中/英文都只占一个字节;采用GB2312或GBK编码方式时,一个中文占两个字节;而采用UTF-8编码方式时,一个中文占三个字节。

      微信平台采用的微信编码方式及字符串所占字节数的计算

      那么,在向微信服务器返回消息时,该采用什么编码方式呢?当然是UTF-8,因为我们已经在doPost方法里采用了如下代码来避免中文乱码了:

      // 将请求、响应的编码均设置为UTF-8(防止中文乱码)

      request.setCharacterEncoding("UTF-8");

      response.setCharacterEncoding("UTF-8");

      getMsgContent()方法返回的内容正是微信的文本消息长能够支持的,即采用UTF-8编码方式时,文本消息内容多支持2047个字节,也就是微信公众平台接口文档里所说的回复的消息内容长度不超过2048字节,即使是等于2048字节也不行,你可以试着将getMsgContent()方法里的内容多加一个英文符号,这个时候微信就不响应了。

      同时,我们也发现,如果采用gb2312编码方式来计算getMsgContent()方法返回的文本所占字节数的结果是1365,这就是为什么很多朋友都说微信的文本消息大长度好像只支持1300多字节,并不是接口文档中所说的2048字节,其实是忽略了编码方式,只是简单的使用了String类的getBytes()方法而不是getBytes("utf-8")方法去计算所占字节数。


    2022-10-08
    有用
    回复
登录 后发表内容