在VIM中将unicode作为十六进制

时间:2013-09-20 09:30:05

标签: vim unicode hex

我正在阅读关于unicode的这篇文章 - http://www.linuxjournal.com/content/unicode

为了更好地理解这个概念,在VIM中我保存了unicode字符'ഒ'U+ 0D12。当我切换到十六进制模式(使用:%!xxd命令)时,我看到以下内容:

<00> 0000000:e0b4 920a ....

\ 0a是结尾\ n。但其他十六进制值对我没有任何意义。任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:5)

  • U+0D12是ഒ。
  • 的unicode代码点
  • 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