【问题标题】:How does Struts 2 supports utf-8 encoding in multiple languagesStruts 2 如何支持多语言的 utf-8 编码
【发布时间】:2015-12-02 06:27:10
【问题描述】:

我知道java使用UTF-16编码。即 Java 使用 16 bits 对字符进行编码。所以java可以支持65536字符。所以java可以提供国际化。

在使用 Struts2 时,我发现 Struts2 使用 UTF-8 编码,这意味着它只能支持 256 个字符,例如 ASCII,但 Struts2 仍然支持国际化。

现在我的问题是 UTF-8 编码为什么只支持 256 个字符的国际化?

【问题讨论】:

    标签: java utf-8 utf-16


    【解决方案1】:

    UTF-16 和 UTF-8 是 Unicode 字符集的几种编码中的两种。 Unicode 中最多有 1114112 个(0x0 到 0x10FFFF)代码点。 UTF-16 以一个或两个 16 位代码单元对 Unicode 代码点进行编码。 UTF-8 将 Unicode 代码点编码为一到四个 8 位代码单元。

    ASCII 是具有一种编码的字符集。它有 128 个代码点。根据 Unicode 的设计,Unicode 的前 128 个代码点是与 ASCII 相同的字符。

    Unicode 比大多数字符集复杂一点。在 Unicode 中,字素(出现在一个位置的符号)由一个基本代码点和一系列任意数量的组合代码点组成,例如变音符号或变音符号。

    Java、JavaScript、.NET ......在内部使用 UTF-16,因此字符串是 UTF-16 代码单元的计数序列,这意味着有无数个代码点和无数个字素。这使得迭代变得困难并且无法建立索引。

    但是,许多标准功能(例如读取和写入文件)都使用 UTF-8,因为它可以为西方语言的文本节省空间。

    【讨论】:

      【解决方案2】:

      UTF-8 最多使用 6 个字节(由于RFC 3629 而限制为最多 4 个字节)以 8 位代码单元的形式对字符进行编码。 见Wiki description

      编码实际上是可变长度的,称为 UTF-8,因为它使用 8 位代码单元。另一方面,UTF-16 使用 16 位代码单元(最多 2 个 16 位代码单元,最多 4 个字节)。

      【讨论】:

        【解决方案3】:

        唯一的选择是使用 ASCII 格式的 UTF-8(参见RFC 5137),即\uxxx。如果您使用 ASCII 字符集,则不需要将它们转换为 ISO-8859-1 编码。对于其他字符集,您需要使用native2ascii 工具将.properties 文件的本机编码转换为ISO-8859-1 编码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 2011-10-08
          • 1970-01-01
          • 2012-02-29
          • 1970-01-01
          • 2015-03-18
          相关资源
          最近更新 更多