文字列をISO-8859-1からUTF-8に変換し、Javaに戻す方法を知っている人はいますか?
Webから文字列を取得してRMS(J2ME)に保存していますが、特殊文字を保持してRMSから文字列を取得したいのですが、ISO-8859-1エンコーディングを使用しています。どうすればよいですか?
文字列をISO-8859-1からUTF-8に変換し、Javaに戻す方法を知っている人はいますか?
Webから文字列を取得してRMS(J2ME)に保存していますが、特殊文字を保持してRMSから文字列を取得したいのですが、ISO-8859-1エンコーディングを使用しています。どうすればよいですか?
一般に、これはできません。UTF-8 は、あらゆる Unicode コード ポイントをエンコードできます。ISO-8859-1 はそれらのごく一部しか処理できません。したがって、ISO-8859-1 から UTF-8 へのトランスコードは問題ありません。UTF-8 から ISO-8859-1 に戻すと、サポートされていない文字が見つかったときに、テキストに「置換文字」(�) が表示されます。
テキストをトランスコードするには:
byte[] latin1 = ...
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");
また
byte[] utf8 = ...
byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");
Charset
下位レベルのAPIを使用すると、より詳細に制御できます。たとえば、エンコードできない文字が見つかった場合に例外を発生させたり、置換テキストに別の文字を使用したりできます。
私にとって はうまくいきました:(「üzümbağları」はトルコ語で書かれた正しいものです)
ISO-8859-1 を UTF-8 に変換します。
String encodedWithISO88591 = "üzüm baÄları";
String decodedToUTF8 = new String(encodedWithISO88591.getBytes("ISO-8859-1"), "UTF-8");
//Result, decodedToUTF8 --> "üzüm bağları"
UTF-8 を ISO-8859-1 に変換する
String encodedWithUTF8 = "üzüm bağları";
String decodedToISO88591 = new String(encodedWithUTF8.getBytes("UTF-8"), "ISO-8859-1");
//Result, decodedToISO88591 --> "üzüm baÄları"
がある場合はString
、次のことができます。
String s = "test";
try {
s.getBytes("UTF-8");
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
'壊れた' があるString
場合は、何か間違ったことString
をしました。 aString
を別のエンコーディングの a に変換することは、間違いなく正しい方法ではありません。String
aを a に、byte[]
またはその逆に変換できます(エンコーディングが指定されている場合)。JavaではString
AFAIKでエンコードされてUTF-16
いますが、それは実装の詳細です。
があるInputStream
とします。 を読み込んでから、それを usingbyte[]
に変換できます。String
byte[] bs = ...;
String s;
try {
s = new String(bs, encoding);
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
またはさらに良い(エリクソンのおかげで)InputStreamReader
そのように使用します:
InputStreamReader isr;
try {
isr = new InputStreamReader(inputStream, encoding);
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
これは、文字列出力を使用した簡単な方法です (これを行うためのメソッドを作成しました)。
public static String (String input){
String output = "";
try {
/* From ISO-8859-1 to UTF-8 */
output = new String(input.getBytes("ISO-8859-1"), "UTF-8");
/* From UTF-8 to ISO-8859-1 */
output = new String(input.getBytes("UTF-8"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return output;
}
// Example
input = "Música";
output = "Música";