在VIM中作为十六进制的unicode

在VIM中作为十六进制的unicode,vim,unicode,hex,Vim,Unicode,Hex,我在读这篇关于unicode的文章- 为了更好地理解这个概念,我在VIM中保存了unicode字符的ഒ' U+0D12。当我切换到十六进制模式(使用:%!xxd命令)时,我看到以下内容: 0000000:e0b4 920a \0a是结尾\n。但是其他十六进制值对我来说没有任何意义。有人能解释一下吗?如果你希望看到0D12,那只是Unicode码点。Vim缓冲区采用UTF-8编码,UTF-8使用可变字节数对字符进行编码:换行符为单字节0a,而代码点编码为3个字节。正如glts所评论的,有几个教程可

我在读这篇关于unicode的文章-

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

0000000:e0b4 920a


\0a是结尾\n。但是其他十六进制值对我来说没有任何意义。有人能解释一下吗?

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


如果希望看到
0D12
,则可以通过另一种编码保存缓冲区,例如通过
:w++enc=ucs2

,这只是Unicode码点。Vim缓冲区采用UTF-8编码,UTF-8使用可变字节数对字符进行编码:换行符为单字节
0a
,而代码点编码为3个字节。正如glts所评论的,有几个教程可以学习这些重要的区别

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

  • U+0D12
    是ഒ.
  • E0 B4 92
    是三个字节的十六进制表示形式ഒ 以UTF-8编码
  • xxd
    不知道或不关心unicode码点,因此它执行默认情况下应该执行的操作:它显示您给它的每个字节的十六进制值
如果您好奇,在Vim中点击
ga
,将以各种格式显示光标下的字符值:

<ഒ> 3346, Hex 0d12, Octal 6422
如果你很好奇,
:%!xxd-b
显示这些字节的二进制值:

11100000 10110100 10010010
  • U+0D12
    是ഒ.
  • E0 B4 92
    是三个字节的十六进制表示形式ഒ 以UTF-8编码
  • xxd
    不知道或不关心unicode码点,因此它执行默认情况下应该执行的操作:它显示您给它的每个字节的十六进制值
如果您好奇,在Vim中点击
ga
,将以各种格式显示光标下的字符值:

<ഒ> 3346, Hex 0d12, Octal 6422
如果你很好奇,
:%!xxd-b
显示这些字节的二进制值:

11100000 10110100 10010010

您看到的是三个字节,其中“ഒ" 已使用UTF-8编码。请阅读任何基本的Unicode教程,例如,或其中一个,或…您看到的是ഒ“已采用UTF-8编码。请阅读任何基本的Unicode教程,例如,或其中一个,或...@R.MartinhoFernandes:还有基本的多语言平面与扩展的多语言平面,还有许多细微之处需要说明。对于大多数实际问题,我尽量保持简单的解释(如西里尔文和中文等常用符号),16位的范围足够了。但这并不意味着它更正确。(不,所有这些都不需要在这里解释;你所要做的就是不要因为过度提及“16位”而误导他人)@R.MartinhoFernandes:好吧,我把它删掉了,反正只是一个旁注。也许这只表明我是一个老古董,经历过Unicode人相信所有符号都可以放入16位的时代:-)@R.MartinhoFernandes:还有基本的多语言平面和扩展的多语言平面,还有很多好的观点需要说明。我试图保持解释的简单,对于大多数实际问题(如西里尔文和中文等常用符号),16位范围就够了。这并不意味着它更加正确。(不,所有这些都不需要在这里解释;您所要做的就是不要因为过度提及“16位”而误导他人)@R.MartinhoFernandes:好吧,我把它删掉了,反正只是一个旁注。也许这只表明我是一个老古董,经历过Unicode人相信所有符号都可以放入16位的时代:-)