UTF8 文字列を読み取り可能な文字列に変換する方法。
Like : ⬠(UTF8) は €
Charset を使用してみましたが、機能しませんでした。
UTF8 文字列を読み取り可能な文字列に変換する方法。
Like : ⬠(UTF8) は €
Charset を使用してみましたが、機能しませんでした。
Javaの文字列は、すでにUnicode表現です。その上でgetBytesメソッドの1つを呼び出すと、特定のエンコーディング(例ではISO-8859-15)でエンコードされた表現(バイト、つまりバイナリ値として)を取得します。このバイト配列をUnicode文字列に戻す場合は、文字列コンストラクターの1つを使用して、バイト配列を受け入れることができますが、バイト配列が最初に生成されたのとまったく同じエンコーディングを使用して行う必要があります。そうして初めて、それをユニコード文字列に戻すことができます(エンコードがなく、エンコードは必要ありません)。
文字列コンストラクターとgetBytesメソッドの両方のエンコードなしのメソッドに注意してください。これらは、コードが実行されているプラットフォームのデフォルトのエンコードを使用するため、達成したいものではない可能性があります。
文字列を ISO-8859-15 にエンコードしbyte[] b = "Üü?öäABC".getBytes("ISO-8859-15");
てから、 UTF-8 でデコードしていますSystem.out.println(new String(b, "UTF-8"));
。ISO-8859-15 と同じ方法でデコードする必要があります。
「ISO-8859-15」でエンコードされた byteArray を「UTF-8」形式でデコードしようとしています
b = "Üü?öäABC".getBytes("ISO-8859-15");
u = "Üü?öäABC".getBytes("UTF-8");
System.out.println(new String(b, "ISO-8859-15")); // will be ok
System.out.println(new String(b, "UTF-8")); // will look garbled
System.out.println(new String(u,"UTF-8")); // will be ok
This is not "UTF-8" but completely broken and unrepairable data. Strings do not have encodings. It makes no sense to say "UTF-8" string in this context. String is a string of abstract characters - it doesn't have any encodings except as an internal implementation detail that is not our concern and not related to your problem.
ここでの問題は、コンストラクターで指定したものを使用してJava文字列がエンコードされていると想定していることだと思います。 そうではありません。 UTF-16にあります。
つまり、"Üü?öäABC".getBytes("ISO-8859-15")
実際にはUTF-16文字列をISO-8859-15に変換し、そのバイト表現を取得しています。
Eclipseコンソールで人間が読める形式を取得したい場合は、そのまま(UTF-16で)そのままにして、を呼び出しますSystem.out.println("Üü?öäABC")
。これは、Eclipseコンソールが文字列をデコードしてUTF-16として表示するためです。