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

Encoding 我们需要多少字节来存储一个阿拉伯字符,encoding,arabic,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) 每种编码的优点是什么?什么时候我们应该选择一种而不是另一种?有几种不同的unicode编码,使用的空间大小取决于您使用的编码:首先,unicode不是一种编

对于表示阿拉伯字符所需的存储空间,我有点困惑

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

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

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

有几种不同的unicode编码,使用的空间大小取决于您使用的编码:

首先,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-8使用一个字节表示ASCII字符,2到3个字节表示基本字符(包括所有阿拉伯语),4个字节表示其他字符。UTF-16使用两个字节作为基本字符,使用4个字节作为其他字符。因此,基本上,如果您使用大量ASCII,UTF-8更好。对于国际文本,UTF-16更好

在UTF-8中,“ح”(U+062D)被编码为2字节序列“D8AD”,而ﻰ' (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中,所有阿拉伯字符都是两个字节。endianness使这一点更加复杂。注意,UTF-16中的字节只是两部分交换的代码点。同样有效的编码是第一个为“062D”,第二个为“FE F0”


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

只要您始终指定使用哪一个字符,这两个字符都可以。必读:新文本中不应使用表示形式,渲染引擎应注意显示适当的位置形状。这个答案很好。谢谢