相同的可见字符但不同的字节

时间:2017-04-06 12:30:19

标签: vim text utf-8 character-encoding uniq

我有两个文件,每个文件都有相同的(Hindi)字,但我为不同来源的每个文件复制了这个字。虽然两个来源的文字在视觉上是相似的,但它们的字节是不同的。文件为herehere。我不确定两种情况下的原始编码,但打开文件,因为UTF-8正确显示字符。

有趣的是,当我使用uniq实用程序执行唯一操作时,只返回一个条目,但是当我将它们放入文件并在vim中对其进行排序时,我得到两个条目。

请解释发生了什么。

更新:

如果您不想打开链接,那么Python文字:'\u091c\u0941\u095c\n''\u091c\u0941\u0921\u093c\n'和单词看起来像

hindi

2 个答案:

答案 0 :(得分:2)

Vim说:

  

:h :sort
  有关排序的详细信息取决于所使用的库函数。没有   保证排序服从当前的语言环境。你必须尝试一下。

同时uniq(我认为gnu coreutils sort,而不是vim命令)是unicode,知道如何整理文本。

在vim中的字符上按 g a g 8 查看代码点或字节,分别构成一个角色。

答案 1 :(得分:1)

  • 095CDEVANAGARI LETTER DDDHA:ड़
  • 0921DEVANAGARI LETTER DDA:ड
  • 093CDEVANAGARI SIGN NUKTA(字符下方的点):़

你可以在Python中看到那些是等价的(这里是Python 3语法):

import unicodedata
unicodedata.normalize('NFC', '\u0921\u093c') == unicodedata.normalize('NFC', '\u095c')
# => True

您应该能够使用:%!uconv -x any-nfc(安装了ICU)或:%!ruby -ne 'puts $_.unicode_normalize(:nfc)'(安装了Ruby)来规范化您的文件。