Stringのインスタンスを生成する際に、文字コードを指定して生成された文字列が
指定した文字コードのバイトデータと異なる原因がわからないので教えてください
試したこと
・EUC-JPのバイト配列から文字コードがEUC-JPのStringインスタンを生成
サンプルコード
byte[] beforeByte = "あ".getBytes("EUC-JP");
String afterString = new String(beforeByte, "EUC-JP");
System.out.println("--------String生成前バイトデータ --------");
for(byte b: beforeByte){
System.out.println("コード " + String.format("%02X", b));
}
System.out.println("-------- String生成後バイトデータ--------");
for(byte b: afterString.getBytes()){
System.out.println("コード " + String.format("%02X", b));
}
結果
--------String生成前バイトデータ --------
コード A4
コード A2
-------- String生成後バイトデータ--------
コード E3
コード 81
コード 82
日本語「あ」のEUC-JPの文字コードが「A4A2」でUTF-8の文字コードが「E38182」
普通に考えるとバイトデータがEUC-JPの文字コードの値でStringが生成されると思うのですが
なぜかUTF-8の文字コードで生成されます。Stringはシステムライブラリーのためデバッガで値の確認もできないので
原因がわかりません。推測ではJava内部の文字コードがunicodeなので結局は全部それベースのStringしか
生成されないのではと思ったのですが、それだと文字コードを指定する意味もわかりません。
「/www.ideone.com」の実行環境でも同じ結果になることは確認してます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/06 10:01
2018/10/06 10:11
2018/10/06 10:18