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

时间:2010-12-01 07:41:40

标签: encoding arabic

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

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

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

每种编码有哪些优点?我们什么时候应该选择一个而不是另一个?

2 个答案:

答案 0 :(得分: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”,您可以从Wikipedia article上的表中看到。字符'ى'(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中的所有字符。

答案 1 :(得分:1)

有几种不同的unicode编码,使用的空间量取决于您使用的是哪一种:http://unicode.org/faq/utf_bom.html