UTF-8、UTF-16和UTF-32之间有什么区别?
我知道它们都将存储Unicode,并且每个都使用不同的字节数来表示一个字符。选择一个比另一个有优势吗?
UTF-8、UTF-16和UTF-32之间有什么区别?
我知道它们都将存储Unicode,并且每个都使用不同的字节数来表示一个字符。选择一个比另一个有优势吗?
当前回答
UTF-8为变量1 ~ 4字节。 UTF-16是可变的2或4字节。 UTF-32是固定的4字节。
其他回答
如前所述,差异主要在于底层变量的大小,在每种情况下,它们都会变大以允许表示更多字符。
然而,字体、编码和其他东西都非常复杂(没有必要?),所以需要一个大链接来填充更多细节:
http://www.cs.tut.fi/~jkorpela/chars.html#ascii
不要期望理解所有的东西,但是如果你不想在以后遇到问题,尽可能早地学习(或者让别人帮你整理)是值得的。
保罗。
Unicode是一个标准,关于UTF-x,你可以把它看作是一个技术实现,用于一些实际目的:
UTF-8 - "size optimized": best suited for Latin character based data (or ASCII), it takes only 1 byte per character but the size grows accordingly symbol variety (and in worst case could grow up to 6 bytes per character) UTF-16 - "balance": it takes minimum 2 bytes per character which is enough for existing set of the mainstream languages with having fixed size on it to ease character handling (but size is still variable and can grow up to 4 bytes per character) UTF-32 - "performance": allows using of simple algorithms as result of fixed size characters (4 bytes) but with memory disadvantage
我做了一些测试来比较MySQL中UTF-8和UTF-16之间的数据库性能。
更新的速度
utf - 8
utf - 16
插入的速度
删除速度
UTF-8在ASCII字符代表文本块中的大部分字符的情况下具有优势,因为UTF-8将这些字符编码为8位(像ASCII一样)。它的另一个优点是只包含ASCII字符的UTF-8文件具有与ASCII文件相同的编码。
在ASCII不占主导地位的情况下,UTF-16更好,因为它主要每个字符使用2个字节。UTF-8将开始对高阶字符使用3个或更多字节,而UTF-16对大多数字符仅使用2个字节。
UTF-32将在4字节内涵盖所有可能的字符。这使得它非常臃肿。我想不出使用它有什么好处。
utf - 8
没有字节顺序的概念 每个字符使用1到4个字节 ASCII是一种兼容的编码子集 完全自同步,例如从流中的任何地方删除字节最多只会损坏一个字符 几乎所有的欧洲语言都是用两个字节或更少的字符编码的
utf - 16
必须使用已知的字节顺序进行解析,或者读取字节顺序标记(BOM)。 每个字符使用2或4个字节
utf - 32
每个字符是4个字节 必须使用已知的字节顺序进行解析,或者读取字节顺序标记(BOM)。
UTF-8将是空间效率最高的,除非大多数字符来自CJK(中国、日本和韩国)字符空间。
UTF-32最适合通过字符偏移量随机访问字节数组。