Java 两系统接口调用字符乱码问题?
PHP中文网
PHP中文网 2017-04-18 10:03:23
0
4
414
PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(4)
伊谢尔伦

失敗した理由を知るには、 new String(str.getBytes("GBK"),"UTF-8"); の意味を理解する必要があります。
まず、Java の String は内部的に UTF-16LE でエンコードされます。
str.getBytes("GBK")、Byte配列を取得し、strのエンコーディングをGBKに変換する内容です。
new String(str.getBytes("GBK"),"UTF-8") は、この Byte 配列の内容を UTF-8 でエンコードされたデータとして扱い、それを String (UTF-16LE) に変換します。
分かりましたか?これが機能する場合、幽霊が存在することになります。

クライアントとサーバーは両方とも Java であるため、Java の文字列エンコーディングは UTF-16 である必要があります。システム エンコーディング (Windows または Linux) の影響を受けません。
この場合、文字列は直接送信しないことをお勧めします。文字列は、使用するライブラリ (tomcat を例として、デフォルトの iso8859-1) によって自動的にエンコーディングに変換されるからです。

バイト配列を直接送受信できる場合 は、間違いなくプロトコル仕様の UTF-8 を使用できます。どちらかの当事者が受信するデータは new String(data, "UTF-8") で、送信されるデータは str.getBytes("UTF-8") です。

クライアント コードを変更できない場合、またはクライアント コードが C または他の言語で記述されている場合。 クライアントが GBK データを送信していることが確実な場合。 サーバーがバイト配列 を直接受信できる場合、新しい String(data, "GBK") を解析できます。返される場合も、バイト配列 str.getBytes("GBK") になります。

String のみを送受信できる場合は、それを構成し、変換するエンコーディングを設定する必要があります。例えばtomcatの場合、GETデータの場合はweb.xmlを修正し、URLエンコードの設定項目を追加する必要があります。 POST データ の場合、 を変換するフィルターを作成する必要があります。 HTTP 通信クラスの場合、SetEncoding などのメソッドが提供される場合があります。

いいねを押す +0
Ty80

URL の場合は、URLEncoder/URLDecoder クラスを使用できます

いいねを押す +0
左手右手慢动作

あなたがクライアントの場合:
サーバーから取得した文字列は UTF-8 でエンコードされています。表示する必要がある場合は、まず文字列を UTF-8 に従ってバイトコードにデコードしてから、GBK エンコードに従います。
サーバーに送信する文字列も utf-8 でエンコードする必要があります。GBK でエンコードされた文字列をバイトコードにデコードしてから、utf-8 に従ってエンコードする必要があります。
その逆も同様です。
文字化けの原因は端末のエンコードの問題かも?

リーリー
いいねを押す +0
迷茫

gbk を直接 utf-8 に変換すると、iso8859-1 でエンコードできます。つまり、2 バイトが 3 バイトに変換されます。漢字の数が奇数の場合、最後のバイトを変換するときにエラー出力が計算されますか? 、やはり文字化けしてしまいます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!