
Smallest Unicode encodings for different languages?不同语言的不同unicode编码的典型平均每字符字节率是多少? 例如。 如果我想用最少的字节来编码一些英文文本,那么平均每个字符UTF-8将为1个字节,而UTF-16将为2个字节,因此我选择UTF-8。 如果我想要一些韩文文字,那么UTF-16可能平均每个字符大约2个字符,而UTF-8可能平均大约3个字符(我不知道,我只是在这里举例说明一些数字)。 哪种编码对不同语言和字符集的存储要求最小? 如果您真的担心字符串/字符的大小,是否考虑过压缩它们?这样会自动将字符串缩减为"最小"编码。这是一个令人头疼的问题,尤其是如果您想在内存中这样做,并且在很多情况下它不会给您带来任何好处,但是尤其是编码,对于您看上去紧凑的级别而言,它往往过于通用瞄准。 UTF8最适用于字符主要在U + 0800以下的任何字符集。否则为UTF16。 也就是说,UTF8适用于拉丁文,希腊文,西里尔文,希伯来文和阿拉伯文以及其他一些语言。在除拉丁语之外的其他语言中,字符将占用与UTF16中相同的空间,但是您将在标点和间距上节省字节。 对于任何给定的语言,您的每字符字节率都相当恒定,因为大多数语言都分配给了连续的代码页。重音拉丁字符是最大的例外,在代码空间中,重音拉丁字符分配得比无重音形式高。我没有这些的确切数字。 对于具有连续字符分配的语言,维基百科上有一张表格,其中列出了各种语言的详细编号。通常,UTF-8适用于大多数小型字符集(在高代码页上分配的字符集除外),而UTF-16适用于两字节字符集。 如果需要更密集的压缩,则可能还需要查看Unicode技术说明14,它比较了一些旨在减少各种语言的数据大小的特殊用途的编码。但是这些技术并不是特别普遍。 我不知道确切的数字,但是对于日语,Shift_JIS平均每个字符的字节数比UTF-8小,EUC-JP也是如此,因为它们针对日语文本进行了优化。但是,它们没有覆盖与Unicode相同的代码点空间,因此它们可能不是您问题的正确答案。 对于日语字符,UTF-16优于UTF-8(每个字符2个字节,而不是3个字符),但是如果有很多7位字符,则它比UTF-8差。这取决于上下文-技术文本更有可能在1字节范围内包含许多字符。日语经典文字可能没有任何文字。 请注意,对于传输,如果可以压缩(gzip,bz2)数据,则编码并不重要。 Unicode中字母的代码点彼此靠得很近,因此您希望压缩数据中的前缀很短的通用前缀。 UTF-8通常适合于在内存中表示,因为它通常比UTF-32或UTF-16更紧凑,并且与char *上的功能兼容,这些功能可以"期望" ASCII或ISO-8859-1 NUL终止的字符串。但是,如果您需要按索引随机访问字符,则没有用。 如果您不关心非BMP字符,则UCS-2始终是每个字符2个字节,因此可以进行随机访问。但这取决于您所说的" Unicode"的含义。 在UTF-16中,所有重要的语言(除了克林贡语,精灵语言和其他奇怪的事物)都将被编码为2个字节的字符。 因此,问题是要找到具有2个字节或1个字节大小的字符的字形的语言。
在UTF-8上的Wikipedia页面中: 我们看到,Unicode索引为0x0800或更大的字符在UTF-8中的长度至少为3个字节。 知道这一点,您只需要查看unicode上的代码表即可:http://www.unicode.org/charts/ 符合您要求的语言。 :-) 现在,请注意,根据您使用的框架,选择可能不是您要做的:
所以,拿起你的毒药... :-) UTF-8 JoelOnSoftware上有一篇关于unicode的很好的文章: 每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!) |