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