我正在阅读这篇关于 unicode 的文章 - http://www.linuxjournal.com/content/unicode
为了更好地理解这个概念,我在 VIM 中保存了 unicode 字符 'ഒ' U+0D12。当我切换到十六进制模式(使用 :%!xxd 命令)时,我看到以下内容:
0000000: e0b4 920a ....
\0a 是结尾 \n 。但是其他十六进制值对我来说没有任何意义。任何人都可以对此有所了解吗?
我正在阅读这篇关于 unicode 的文章 - http://www.linuxjournal.com/content/unicode
为了更好地理解这个概念,我在 VIM 中保存了 unicode 字符 'ഒ' U+0D12。当我切换到十六进制模式(使用 :%!xxd 命令)时,我看到以下内容:
0000000: e0b4 920a ....
\0a 是结尾 \n 。但是其他十六进制值对我来说没有任何意义。任何人都可以对此有所了解吗?
U+0D12
是ഒ的unicode码位。E0 B4 92
是组成 ഒ 的三个字节的十六进制表示,以 UTF-8 编码。xxd
不知道也不关心 unicode 代码点,所以它默认做它应该做的事情:它显示你给它的每个字节的十六进制值。如果你好奇,ga
在 Vim 中点击会以各种格式显示光标下字符的值:
<ഒ> 3346, Hex 0d12, Octal 6422
并g8
显示其十六进制值:
e0 b4 92
如果您很好奇,请:%!xxd -b
显示这些字节的二进制值:
11100000 10110100 10010010
如果您希望看到0D12
,那只是 Unicode代码点。你的 Vim 缓冲区是用 UTF-8 编码的,它使用可变数量的字节来编码字符:换行符是一个 byte 0a
,而代码点是用 3 个字节编码的。正如 glts 评论的那样,有几个教程可以学习这些重要的区别。
您可以将缓冲区保存为另一种编码,例如通过:w ++enc=ucs2
.