キャラクターをbyte
に変換してからchar
に戻すと、そのキャラクターは不思議なことに消えて別のものになります。これはどのように可能ですか?
これはコードです:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
2行目まではすべて正常です。
1行目では、コンソールに「a」と印刷できますが、「È」と表示されます。
2行目では、コンソールに「b」と印刷できますが、-56が表示されます。これは、バイトが署名されているため200です。そして200は「È」です。だからそれはまだ大丈夫です。
しかし、行3の何が問題になっていますか? 「c」は別のものになり、プログラムは? 65480
。それはまったく違うものです。
正しい結果を得るために3行目に何を書くべきですか?
new String(byteArray, Charset.defaultCharset())
これにより、バイト配列がJavaのデフォルトの文字セットに変換されます。 byteArrayで提供する内容によっては、例外がスローされる場合があります。