コード値が 2 バイト、3 バイトの範囲の Unicode 文字を 16 進数に変換したいと考えています。
文字を16進数に変換する方法を知っています。そのために、最初にintを使用してキャストすることにより、文字をASCIIに変換しています。それから、Integer.tohexString を使用して 16 進数に変換します。
ただし、中国語などのユニコード文字の扱い方がわかりません。誰か助けてもらえますか?
コード値が 2 バイト、3 バイトの範囲の Unicode 文字を 16 進数に変換したいと考えています。
文字を16進数に変換する方法を知っています。そのために、最初にintを使用してキャストすることにより、文字をASCIIに変換しています。それから、Integer.tohexString を使用して 16 進数に変換します。
ただし、中国語などのユニコード文字の扱い方がわかりません。誰か助けてもらえますか?
Java では文字列をバイト配列として扱うべきではありません...しかし、必要に応じて使用できますgetBytes()
byte[] bs = "中文".getBytes("utf-8");
for(byte b : bs)
System.out.print(Integer.toHexString(b) + " ");
アプローチを再考する必要があると思います。
一般に、このデータの何らかの I/O を実行したいようです。一般に、文字エンコーディングと java.io Reader/Writer API を使用してこれを行います。
InputStreamReader および OutputStreamWriter を参照してください。
ライターの出力をいつでも FileOutputStream (または ByteArrayOutputStream ) に送信して、文字をバイナリ データとして取得できます。
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("file"), "utf-8"));
out.println("...");
そのデータをbase64でエンコードするか、ASCII 16進数として表現したい場合、それは非常に簡単なことです。
私のコメントを参照してください。
「ASCII に変換」しないでください。Javaは、CJK Han スクリプトを含むBasic Multilingual Plane
char
全体をサポートするのに十分な大きさです。
/* 七 -> 4e03 */
assert "4e03".equals(Integer.toHexString('七'));