【发布时间】:2018-11-17 00:20:45
【问题描述】:
我的职业是 PHP 开发人员。
考虑下面的例子:
我想使用 UTF-8 编码对单词 "hello" 进行编码。
所以,
“hello”各个字母的对应码点如下:
h = 104
e = 101
l = 108
o = 111
所以,我们可以说十进制数列表代表字符串"hello":
104 101 108 108 111
UTF-8 编码将像这样(二进制)存储 "hello":
01101000 01100101 01101100 01101100 01101111
如果你仔细观察上面的二进制编码值,你会知道十进制数的每个二进制等价物前面都有二进制位值0。
我的问题是为什么这个初始的0 被添加到每个可存储的字符前面?在 UTF-8 编码中使用它的目的是什么?
当使用 UTF-16 格式对相同的字符串进行编码时,会发生什么?
如果有必要,那么最初的额外字符可以是位值1吗?
NUL Byte是否表示二进制字符0?
【问题讨论】:
-
您显示的数字是代码点的十进制表示。实际的代码点是:
h = U+0068 (hex 0x68 dec 104), e = U+0065 (hex 0x65 dec 101), l = U+006C (hex 0x6C dec 108), o = U+006F (hex 0x6F dec 111)。代码点 hello 在 UTF-16LE 中编码如下:01101000 00000000 01100101 00000000 01101100 00000000 01101100 00000000 01101111 00000000和在 UTF-16BE 中:00000000 01101000 00000000 01100101 00000000 01101100 00000000 01101100 00000000 01101111
标签: unicode utf-8 character-encoding utf-16 utf