UTF-8字符串是否总是短于UTF-16?

时间:2013-01-04 14:56:16

标签: text unicode encoding utf-8 utf-16

如果我有两个相同文本的字符串,一个是UTF-8,另一个是UTF-16 是否可以安全地假设UTF-8字符串总是小于或等于UTF-16字符串? (按字节顺序)

2 个答案:

答案 0 :(得分:15)

不,虽然UTF-8文本通常更短,但并不总是

U + 0000和U + FFFF之间的任何内容都将代表with 2 bytes (one UTF-16 codepoint) in UTF-16

U + 0800和U + FFFF之间的字符将用3 bytes in UTF-8表示。

因此,当以UTF-8表示时,仅包含(或大部分)该范围内的字符的文本可能比UTF-16中的文本更长。

换句话说:

  • U + 0000 - U + 007F:UTF-8较短(1 <2)
  • U + 0080 - U + 07FF:两者大小相同(2 = 2)
  • U + 0800 - U + FFFF:UTF-8更长(3> 2)
  • U + 10000 - U + 10FFFF:两者大小相同(4 = 4)

请注意,5和6字节序列曾经在UTF-8中定义,但根据最新标准不再有效,并且从不需要表示Unicode代码点。

答案 1 :(得分:3)

没有。 UTF-8有时会为一个字符使用3个或更多字节,具体取决于表示字符的代码点(数字)所需的位数。