字符流。处理的数据是16位Unicode字符。这是真的吗?

时间:2014-07-08 19:27:53

标签: java unicode utf-8 io

最近我阅读了whats-the-difference-between-unicode-and-utf8及相关主题。

现在我正在读书并阅读关于字符流的内容:

  

处理的数据是16位Unicode字符。

据我所知,“16位Unicode字符”表示utf-16。如果我没有设置显式编码,那么java使用默认的OS编码,但我可以使用InputStreamReader / OutputStreamWriter设置explisitly编码。

我不明白关于сharacter流的内容或短语Data dealt with is 16-bit Unicode characters.是不正确的?

3 个答案:

答案 0 :(得分:0)

计算机唯一知道的是1和0。指定编码是告诉JVM如何解释"或者"解密" 1和0。如果您对UTF 8数据的InputStream使用UTF-16编码,那么您的解密"算法显然不匹配"加密"算法,你将获得各地有趣的人物。

答案 1 :(得分:0)

“处理的数据是16位Unicode字符”表示数据是16位代码单元。每个单元是代理代码单元或代表基本多语言平面(BMP)中的字符,范围为​​U + 0000到U + FFFF。代理代码单元本身并不代表任何东西;只有一对代理代码单元可能有意义,表示BMP之外的字符。

所以“字符”根本不一定是字符,即使我们可以将它们称为“Java字符”。

当您阅读UTF-8编码文件时,您应该使用解释UTF-8编码数据的例程并产生16位代码单元。

答案 2 :(得分:0)

“16位Unicode字符”是Java char的冗余同义词。 char是无符号的16位值,正如您所推测的那样,一系列字符是UTF-16编码的字符串。

短语“处理的数据是16位Unicode字符”是指ReaderWriter仅读取或写入char值(或包含char值的int)。

当代码使用 Reader或Writer时,编码不是一个考虑因素,因为它只适用于char值。正如您所声明的那样,只有当您创建一个包含InputStream或OutputStream的Reader或Writer时,编码才会生成,特别是在创建InputStreamReader或OutputStreamWriter时。