hsurich

hsurich

coder
github
telegram
x
email
steam

JDK中のDataOutputStream.writeBytesメソッドで中国語を渡すと文字化けします。

java プロジェクトでは、パッケージ化された POST リクエストのメソッドがあります。

元々は問題ありませんが、後続の使用中に、パラメータの値が中国語の場合、受信側で文字化けが発生することがわかりました。コードを確認すると、問題がこの行で発生していることがわかります。

out.writeBytes(text + "\r\n");

writeBytesのソースコードを確認すると、文字列 s の各文字が byte 型に強制変換され、高い 8 ビットが破棄されます。例外が発生しない場合、カウンタwrittensの長さだけ増加します。

中国語の文字は 16 ビットであり、byte 型は 8 ビットであるため、文字が中国語の場合、切り捨てられて文字化けが発生します。いくつかのログを追加して、変換後の byte 配列を確認してみましょう。

最終的に、中国語の文字が強制変換されると、8 ビットが失われ、文字化けが発生することがわかります。したがって、文字列を byte 配列に変換してから出力ストリームに書き込む解決策を採用します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。