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

Jos*_*osh 4 unicode encoding text utf-8 utf-16

如果我有2个相同文本的字符串,一个是UTF-8,另一个是UTF-16.
假设UTF-8字符串总是比UTF-16字符串更小或相同,是否安全?(按字节顺序)

Joa*_*uer 15

不,虽然UTF-8文本通常会更短,但情况并非总是如此.

U + 0000和U + FFFF之间的任何内容都将以UTF-16中的2个字节(一个UTF-16代码点)表示.

U + 0800和U + FFFF之间的字符将以UTF-8中的3个字节表示.

因此,当以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代码点.