如何在Java中强制使用UTF-16进行读写操作?

7
我看到您可以通过 Charset.forName("UTF-16") 指定字符集为 UTF-16,并且可以通过 Charset.forName("UTF-16").newDecoder() 创建新的 UTF-16 解码器,但我只看到了在 InputStreamReader 构造函数上指定 CharsetDecoder 的能力。
那么在Java中如何指定使用UTF-16读取任何流呢?

1
如果类允许,您可以在字节流和字符流之间的边界这样做。(InputStreamReader就是这样的一个类,对于其他不提供指定字符集选项的Reader,只需将其包装在InputStreamReader周围即可)。在InputStream(字节流)级别下的低级构造没有字符集的概念。 - nhahtdh
1个回答

11

输入流处理原始字节。当您直接从输入流中读取时,您获得的仅是原始字节,字符集不相关。

将原始字节解释为字符,需要进行某种形式的翻译:如何将原始字节转换为可读字符串?这种“翻译”以字符集的形式呈现。

这个“附加”的层由读取器实现。因此,要从流中读取字符(而不是字节),您需要在流上构建某种类型的Reader(根据您的需求)。例如:

InputStream is = ...;
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16"));

这将导致reader.read()使用您指定的字符集读取字符。如果您想要读取整行,请在其上使用BufferedReader
BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16")));
String line = reader.readLine();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接