【问题标题】:Character streams. Data dealt with is 16-bit Unicode characters. Is it truth?字符流。处理的数据是 16 位 Unicode 字符。是真的吗?
【发布时间】:2014-07-08 19:27:53
【问题描述】:

最近看了whats-the-difference-between-unicode-and-utf8和相关话题。

现在我正在阅读有关字符流的书籍并阅读以下内容:

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

据我了解,“16 位 Unicode 字符”是指 utf-16。如果我没有显式设置编码,那么 java 使用默认操作系统编码,但我可以使用 InputStreamReader/OutputStreamWriter 显式设置编码。

我不明白 Data dealt with is 16-bit Unicode characters. 关于字符流的某些内容或短语不正确?

【问题讨论】:

    标签: java unicode utf-8 io


    【解决方案1】:

    计算机唯一知道的是 1 和 0。指定编码是告诉 JVM 如何“解释”或“解密”1 和 0 的方式。如果您在 UTF 8 数据的 InputStream 上使用 UTF-16 编码,您的“解密”算法显然与“加密”算法不匹配,并且您会得到到处都是有趣的字符。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 嗯,我无法理解你
      【解决方案3】:

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

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

      当代码使用 Reader 或 Writer 时,编码不是一个考虑因素,因为它只适用于 char 值。正如您所说,编码仅在您创建包装 InputStream 或 OutputStream 的 Reader 或 Writer 时才重要——特别是在创建 InputStreamReader 或 OutputStreamWriter 时。

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 2018-12-05
        • 2016-09-10
        • 2018-09-30
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-30
        相关资源
        最近更新 更多