5

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

4

2 回答 2

16

不,虽然 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)

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

于 2013-01-04T15:04:10.760 回答
3

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

于 2013-01-04T15:06:57.660 回答