我不确定我的命名是否正确,所以请纠正我:)
我收到了一个代表巴利语词典的文本文件:由换行符\n
(0x0a) 字符分隔的单词列表。据说,一些特殊字母是使用 UTF-8 编码的,但我对此表示怀疑。
将此文本文件加载到我的任何编辑器(vim、Notepad、TextEdit、..)中都会显示非常混乱的文本,例如
mhiti
仔细查看实际字节,然后显示以下内容(使用hexdump -C
)
0a 0a 1e 6d 68 69 74 69 0a 0a ...mhiti..
在我看来,这是 Unicode 代码点U+1E6D
(“ṭ”或拉丁小写字母 T,下面带有点)。该特定字母具有 UTF-8 编码e1 b9 ad
。
我的问题:是否有工具可以帮助我将此特定文件转换为实际的 UTF-8 编码?我试过iconv
但没有成功;我简要地查看了一个 Python 脚本,但认为有一种更简单的方法可以完成这项工作。似乎这是解决此问题的有用链接,但是没有可以完成此操作的工具吗?我错过了什么吗?
编辑:只是为了让事情更有趣一点,似乎也散布着实际的 UTF-8 编码字符。例如,单词“ ākiñcaññāyatana ”具有以下字节序列
01 01 6b 69 c3 b1 63 61 c3 b1 c3 b1 01 01 79 61 74 61 6e 61
ā k i ñ c a ñ ñ ā y a t a n a
其中“ā”由其 Unicode 代码点 U-0101 编码,“ñ”由 UTF-8 序列 \xc3b1 编码,该序列具有 Unicode 代码点 U-00F1。
编辑:这是一个我无法弄清楚它应该是什么的:
01 1e 37 01 01 76 61 6b 61
? ā v a k a
我只能猜测,但这也没有意义。Unicode 代码点 U+011e 是“Ğ”(UTF-8 \xc49e),但这不是巴利语字符 AFAIK;然后是一个“7”,这在一个词中没有意义。那么 Unicode 代码点 U+1E37 是一个“ḷ”(UTF-8 \xe1b8b7),它是一个有效的巴利语字符。但这会留下第一个字节 \x01 本身。如果我不得不猜测,我会认为这是名称“Jīvaka”,但这与字节不匹配。 稍后:根据作者的说法,这是“Āḷāvaka”——因此假设从上面的字符编码启发式算法,又缺少一个 \x00。重新添加
01 00 1e 37 01 01 76 61 6b 61
Ā ḷ ā v a k a
是否存在从 UTF-16 编码的 Unicode 文件中删除 \x00 字节的“压缩”?