Struts2如何支持多种语言的utf-8编码
How does Struts 2 supports utf-8 encoding in multiple languages
我知道 java 使用 UTF-16
编码。即 Java 使用 16 bits
来编码一个字符。所以 java 可以支持 65536
个字符。所以java可以提供国际化。
当我使用 Struts2 时,我看到 Struts2 使用 UTF-8
编码,这意味着它只能支持 256 个字符,例如 ASCII
但仍然 Struts2 支持国际化。
现在我的问题是 UTF-8
编码为什么只支持 256 个字符的国际化?
UTF-8 使用最多 6 个字节(由于 RFC 3629 而限制为最多 4 个字节)以 8 位代码单元的形式对字符进行编码。
参见 Wiki description。
编码实际上是可变长度的,因为它使用8位代码单元,所以称为UTF-8。另一方面,UTF-16 使用 16 位代码单元(最多 2 个 16 位代码单元,即最大 4 个字节)。
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,因为它可以为西方语言的文本节省 space。
唯一的选择是使用 ASCII 格式的 UTF-8(请参阅 RFC 5137), i.e. \uxxx
. If you are using ASCII character set you don't need to convert them to ISO-8859-1 encoding. For other character sets you need to use the native2ascii 工具将 .properties
文件的本机编码转换为 ISO-8859-1 编码。
我知道 java 使用 UTF-16
编码。即 Java 使用 16 bits
来编码一个字符。所以 java 可以支持 65536
个字符。所以java可以提供国际化。
当我使用 Struts2 时,我看到 Struts2 使用 UTF-8
编码,这意味着它只能支持 256 个字符,例如 ASCII
但仍然 Struts2 支持国际化。
现在我的问题是 UTF-8
编码为什么只支持 256 个字符的国际化?
UTF-8 使用最多 6 个字节(由于 RFC 3629 而限制为最多 4 个字节)以 8 位代码单元的形式对字符进行编码。 参见 Wiki description。
编码实际上是可变长度的,因为它使用8位代码单元,所以称为UTF-8。另一方面,UTF-16 使用 16 位代码单元(最多 2 个 16 位代码单元,即最大 4 个字节)。
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,因为它可以为西方语言的文本节省 space。
唯一的选择是使用 ASCII 格式的 UTF-8(请参阅 RFC 5137), i.e. \uxxx
. If you are using ASCII character set you don't need to convert them to ISO-8859-1 encoding. For other character sets you need to use the native2ascii 工具将 .properties
文件的本机编码转换为 ISO-8859-1 编码。