2015-09-06 40 views
1

我知道java使用UTF-16编码。即Java使用16 bits来编码字符。所以java可以支持65536个字符。所以Java可以提供国际化。Struts 2如何支持多种语言的utf-8编码

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

现在我的问题是如何一个UTF-8编码支持国际化只有256个字符?

回答

6

UTF-16和UTF-8是Unicode字符集的几种编码中的两种。 Unicode中有多达1114112(0x0到0x10FFFF)的码点。 UTF-16以一个或两个16位代码单元编码一个Unicode代码点。 UTF-8以1至4个8位代码单元编码Unicode码点。

ASCII是使用一种编码设置的字符。它有128个码点。通过Unicode的设计,Unicode的前128个码点与ASCII相同。

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

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

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

4

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

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

+0

那么UTF-16使用多少字节? – Jagadeesh

+0

我已经更新了我的答案 –

0

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