多くの友人がこの問題に遭遇したことがあると思います。送信されたテキスト メッセージの内容が長すぎると、WeChat が応答しません。それでは、WeChat で許可されるテキスト メッセージの最大長はどれくらいでしょうか?テキストの長さはどのように計算するのでしょうか? WeChat でサポートされるテキスト メッセージの最大長が 1,300 を超えているといまだに報告する人がいるのはなぜですか?この記事はみんなの疑問を完全に解消します。
インターフェースドキュメントのメッセージ長制限は2048です
インターフェイス ドキュメントが非常に明確であることがわかります。応答メッセージの内容の長さは 2048 バイトを超えません。では、多くの人がメッセージの長さが 1,300 バイトを超えていることをテストしているのに、なぜ WeChat は応答しないのでしょうか?問題は、テキストのバイト数の計算方法を理解していない人がいることだと思います。
テキストが占めるバイト数を正しく計算する方法
テキスト (文字列) が占めるバイト数を計算するには、まず String クラスの getBytes() メソッドを思い浮かべます。このメソッドは、文字列に対応するバイト配列を返し、その長さを計算します。取得する配列 文字列が占めるバイト数。例:
リーリー 上記の例では、2 つの漢字が占有するバイト数は 4 と計算され、1 つの漢字が 2 バイトを占有することになります。本当か?実際、私たちは問題を見落としていました。エンコード方法が異なると、中国語が占めるバイト数も異なります。いったい何が起こるのでしょうか?上記の例では、エンコード方式を指定しなかったため、オペレーティング システムのデフォルトのエンコード方式が使用されます。まずは私が導き出した 3 つの結論を見てみましょう。
1) デフォルトのエンコード方式が ISO8859-1 であるオペレーティング システム プラットフォームで上記の例を実行した場合、計算結果は 2 になります。
2) デフォルトのエンコーディングが gb2312 または gbk であるオペレーティング システム プラットフォームで上記の例を実行した場合、計算結果は 4 になります。3) デフォルトのエンコード方式が utf-8 であるオペレーティング システム プラットフォームで上記の例を実行すると、計算結果は 6 になります。
これが本当の場合、システム プラットフォームでは String.getBytes() メソッドがデフォルトで gb2312 または gbk エンコーディングを使用することを意味しますか?別の例を見てみましょう:
リーリー この例は、上で挙げた 3 つの結論をうまく証明していますか?つまり、ISO8859-1 エンコード方式を使用する場合、中国語/英語の各文字は 1 バイトのみを占有します。GB2312 または GBK エンコード方式を使用する場合、1 つの中国語文字は 2 バイトを占有します。 1 つの漢字は 1 バイトのみを占めます。
WeChatプラットフォームで使用されるエンコード方法と文字列が占めるバイト数の計算
それでは、メッセージを WeChat サーバーに返すときにどのようなエンコード方法を使用する必要があるのでしょうか?中国語の文字化けを避けるために doPost メソッドで次のコードを使用しているため、もちろん UTF-8 です:
リーリー 私が言ったことを検証するために、テストする例を書きました。
リーリー
getMsgContent() メソッドによって返されるコンテンツは、WeChat のテキスト メッセージがサポートできる最長のものです。つまり、UTF-8 エンコーディングを使用する場合、テキスト メッセージのコンテンツは最大 2047 バイトをサポートします。これは、WeChat パブリック プラットフォームで言われているとおりです。インターフェイス ドキュメント 応答メッセージのコンテンツの長さは、2048 バイトに等しい場合でも、2048 バイトを超えません。現時点では、WeChat は、getMsgContent() メソッドのコンテンツに追加の英語記号を追加することはできません。応答する。同時に、getMsgContent() メソッドによって返されたテキストが占めるバイト数を計算するために gb2312 エンコード方式が使用された場合、結果は 1365 であることもわかりました。これが、多くの友人が最大長であると主張する理由です。 WeChat テキスト メッセージのセクションは 1300 ワード以上しかサポートしていないようです。実際、エンコード メソッドは無視され、単に String クラスの getBytes() メソッドが使用されます。 getBytes("utf-8") メソッドで占有バイト数を計算します。
Javaにおけるutf-8エンコードの占有バイト数計算方法のカプセル化
リーリー
さて、この章はここまでです。この記事を通じて皆さんは 2047 という数字だけでなく、文字エンコード方式についても新たに理解できたと思います。