1

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

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

0000000: e0b4 920a ....

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

4

2 回答 2

6
  • U+0D12是ഒ的unicode码位。
  • E0 B4 92是组成 ഒ 的三个字节的十六进制表示,以 UTF-8 编码。
  • xxd不知道也不关心 unicode 代码点,所以它默认做它应该做的事情:它显示你给它的每个字节的十六进制值。

如果你好奇,ga在 Vim 中点击会以各种格式显示光标下字符的值:

<ഒ&gt; 3346, Hex 0d12, Octal 6422

g8显示其十六进制值:

e0 b4 92

如果您好奇,请:%!xxd -b显示这些字节的二进制值:

11100000 10110100 10010010
于 2013-09-20T12:21:04.933 回答
3

如果您希望看到0D12,那只是 Unicode代码点。你的 Vim 缓冲区是用 UTF-8 编码的,它使用可变数量的字节来编码字符:换行符是一个 byte 0a,而代码点是用 3 个字节编码的。正如 glts 评论的那样,有几个教程可以学习这些重要的区别。

您可以将缓冲区保存为另一种编码,例如通过:w ++enc=ucs2.

于 2013-09-20T09:47:34.187 回答