我们需要多少字节来存储阿拉伯字符

sve*_*vit 2 encoding arabic

我对代表阿拉伯字符所需的存储感到有点困惑.

如果这是真的,请告诉我:

  • 在ISO/IEC 8859-6编码中需要2个字节(http://en.wikipedia.org/wiki/ISO/IEC_8859-6)
  • 在UNICODE中需要4个字节(http://en.wikipedia.org/wiki/Arabic_Unicode)

每种编码有哪些优点?什么时候我们更喜欢一个而不是另一个?

mgi*_*uca 10

首先,Unicode不是编码.它是为每种语言中的每个字符分配代码点的标准.这些代码点是整数; 它们占用的字节数取决于特定的编码.最常见的Unicode编码是UTF-8和UTF-16.

总结一下:

  • ISO 8859-6对每个阿拉伯字符使用1个字节,但不支持"阿拉伯语表示形式",也不支持除ASCII之外的任何其他脚本的字符.
  • UTF-8为每个阿拉伯字符使用2个字节,为"阿拉伯语表示形式"使用3个字节.
  • UTF-16为每个阿拉伯字符使用2个字节,包括"阿拉伯语表示形式".

我将使用两个例子:'Í'(U + 062D)和'ى'(U + FEF0).这些数字是十六进制代码,表示每个字符的Unicode代码点.

在ISO 8859-6中,大多数阿拉伯字符仅占用一个字节,因为该编码专用于阿拉伯语.例如,字符'Í'(U + 062D)被编码为单字节"CD",您可以从维基百科文章的表格中看到.字符'ى'(U + FEF0)被列为"阿拉伯语演示表单",所以我想这解释了为什么它根本没有出现在ISO 8859-6中(你无法在该编码中对这个字符进行编码) .

有两种非常常见的Unicode编码,可以编码所有字符:UTF-8UTF-16.它们的用途略有不同.UTF-8对ASCII字符使用一个字节,对于基本字符(包括所有阿拉伯语)使用2到3个字节,对于其他字符使用4个字节.UTF-16对基本字符使用两个字节,对其他字符使用4个字节.所以基本上,如果你使用大量的ASCII,UTF-8会更好.对于国际文本,UTF-16更好.

在UTF-8中,'Í'(U + 062D)被编码为2字节序列"D8 AD",而'ى'(U + FEF0)被编码为3字节序列"EF BB B0".基本上,U + 0080和U + 07FF之间的字符使用2个字节,U + 07FF和U + FFFF之间的字符使用3个字节.因此,所有基本的阿拉伯语和阿拉伯语补充字符使用2个字节,而阿拉伯语表示形式使用3个字节.

在UTF-16中,'Í'(U + 062D)被编码为2字节序列"2D 06",而'ى'(U + FEF0)被编码为2字节序列"F0 FE".在UTF-16中,所有阿拉伯字符都是两个字节.字节序使这变得更加复杂.请注意,UTF-16中的字节只是两个部分交换的代码点.同样有效的编码是第一个的"06 2D"和第二个的"FE F0".

总之,我通常会推荐UTF-8,因为它非常明确,并且非常支持ASCII文本.在任一编码中,阿拉伯字符都是2个字节(除非您使用"表示形式").你可以使用ISO 8859-6,如果你只使用ASCII和阿拉伯字符,没有别的,这将节省你一些空间,但它通常是不值得的,因为它会一旦其他一些字符出现就会中断.UTF-8和UTF-16支持Unicode中的所有字符.