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 回答