我有字符“ö”。如果我看进去这个 UTF-8 表我看到它有十六进制值F6
。如果我看统一码表我看到“ö”有索引E0
and 16
。如果我添加两者,我会得到代码点的十六进制值F6
。这是二进制值1111 0110
.
1)如何从十六进制值中获取F6
到指数E0
and 16
?
2)我不知道怎么来的F6
到两个字节C3
B6
...
因为我没有得到结果,所以我尝试走另一条路。 “ö”在 ISO-8859-1 中表示为“ö”。在里面UTF-8 表我可以看到“à”有十进制值195
并且“¶”具有十进制值182
。转换为位是1100 0011 1011 0110
.
Process:
看看在一个table并获取字符“ö”的 unicode。根据指数计算E0
and 16
你得到了 UnicodeU+00F6
.
根据wildplasser发布的算法可以计算出编码的UTF-8值C3
and B6
.
以二进制形式你得到1100 0011 1011 0110
对应于十进制值195
and 182
.
如果这些值被解释为ISO 8859-1(只有 1 个字节)然后你会得到“?”。
PS:我也发现了这个链接,它显示步骤 2 中的值。
您正在使用的页面让您有些困惑。您的“UTF-8 表”或“Unicode 表”都没有为您提供 UTF-8 中的代码点值。它们都只是简单地列出了字符的 Unicode 值。
在 Unicode 中,每个字符(“代码点”)都有一个分配给它的唯一编号。人物ö
已分配代码点U+00F6
,即F6
以十六进制表示,并且246
以十进制表示。
UTF-8 是一个表示Unicode,每个 Unicode 代码点使用一到四个字节的序列。该文章描述了从 32 位 Unicode 代码点到 UTF-8 字节序列的转换 - 一旦您习惯了,它就非常简单。当然,计算机总是可以做到这一点,但你可以用铅笔和纸轻松地做到这一点,并在头脑中进行一些练习。
如果你进行这种转变,你会看到U+00F6
转换为 UTF-8 序列C3 B6
, or 1100 0011 1011 0110
以二进制表示,这就是为什么它是 UTF-8 表示形式ö
.
您问题的另一半是关于 ISO-8859-1 的。这是一种通常称为“Latin-1"。Latin-1编码的数值与Unicode中的前256个代码点相同,因此ö
is F6
拉丁语-1。
在 UTF-8 和标准 Unicode 代码点 (UTF-32) 之间进行转换后,获得 Latin-1 编码应该很简单。但是,并非所有 UTF-8 序列/Unicode 字符都有对应的 Latin-1 字符。
请参阅优秀文章每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!)为了更好地理解字符编码和它们之间的转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)