7

または、私は立ち往生しています:

String s = new String(new byte[0], Charset.forName("ISO-8859-1"));
// or ISO_8859_1, or LATIN-1 or ... still no constants for those
for (String string : strings) { // those are ISO-8959-1 encoded
    s += string; // hopefully this preserves the encoding (?)
}
4

2 に答える 2

15

Java では、文字列は常にUTF-16 でエンコードされます。それらは単なる値のシーケンスでcharあり、UTF-16 コード単位です。String(byte[], String)コンストラクターにエンコーディングを指定すると、バイトをテキストにデコードする方法が示されるだけです。エンコーディングは後で破棄されます。

エンコーディングを保持する必要がある場合は、独自のクラスを作成してCharsetand をString一緒に保持する必要があります。私はそれをしたかったとは言えませんが、本当にそうする必要がありますか?

(そのため、「行き詰まった」コードはとにかく機能しません。また、非効率的でもあります。)

于 2013-07-28T11:30:45.077 に答える
2

キャッシング付きのコンバーターを使用するにはどうすればよいですか:

public static void main(String args[]) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream(1<<10);
    OutputStreamWriter osw = null;
    try {
        osw = new OutputStreamWriter(baos, "UTF-8");
    } catch (UnsupportedEncodingException ex) {
    }
    osw.write("Привет!");
    osw.flush();
    System.out.println("Hello: " + baos.toString("UTF-8"));
}
于 2013-09-25T15:46:33.847 に答える