77

文字列をISO-8859-1からUTF-8に変換し、Javaに戻す方法を知っている人はいますか?

Webから文字列を取得してRMS(J2ME)に保存していますが、特殊文字を保持してRMSから文字列を取得したいのですが、ISO-8859-1エンコーディングを使用しています。どうすればよいですか?

4

8 に答える 8

111

一般に、これはできません。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を使用すると、より詳細に制御できます。たとえば、エンコードできない文字が見つかった場合に例外を発生させたり、置換テキストに別の文字を使用したりできます。

于 2009-03-16T22:21:00.053 に答える
18

私にとって はうまくいきました:(「ü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ı"
于 2016-08-12T08:45:00.630 に答える
6

がある場合はString、次のことができます。

String s = "test";
try {
    s.getBytes("UTF-8");
} catch(UnsupportedEncodingException uee) {
    uee.printStackTrace();
}

'壊れた' があるString場合は、何か間違ったことStringをしました。 aStringを別のエンコーディングの a に変換することは、間違いなく正しい方法ではありません。Stringaを a に、byte[]またはその逆に変換できます(エンコーディングが指定されている場合)。JavaではStringAFAIKでエンコードされて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();
}
于 2009-03-16T21:30:47.177 に答える
6

これは、文字列出力を使用した簡単な方法です (これを行うためのメソッドを作成しました)。

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";
于 2016-06-13T17:24:57.450 に答える