我尝试转换的 .dsl 格式的字典文件有一些特殊之处。它本质上是一个带有字典对的文本文件。我使用的词典软件是GoldenDict。它需要 UTF-16 字典才能正确呈现。
我拥有的所有词典都是 UTF-16LE 格式。然而,有一个很突出。它具有 iso-8859-1 编码。当我用 vim 打开条目时,它看起来像这样:
abandonarse
[m2][c crimson][b]Sinónimos[/b][/c][/m]
[m2][i][c green]verbo[/c][/i][/m]
[m1][trn][b]desanimarse:[/b] <<desanimarse>>, <<abatirse>>, <<tumbarse>>, <<plegarse>>, <<entregarse>>, <<desligarse>>[/trn][/m]
我必须将其转换为 UTF-16LE,因为 Goldendict 呈现一些西里尔字符而不是西班牙重音字符。然后我尝试:
iconv -f iso-8859-1 -t utf-16le dictionary.dsl -o test.dsl
新的 test.dsl 字典由 Goldendict 正确呈现,但是我可以看到一些我想摆脱的奇怪的东西。首先,刚刚转换的文件的编码无法被识别,因为它通常与其他字典一样:
aleksandr@desktop:~/windoc/Dic/Es extra/dictionary.dsl> file dictionary.dsl
dictionary: data
当我用 vim 打开文件 test.dsl 时,里面的每个字符都添加了 ^@ 。以下是同一条目的示例:
^@<^@<^@e^@n^@t^@r^@e^@g^@a^@r^@s^@e^@>^@>^@,^@ ^@<^@<^@d^@e^@s^@l^@i^@g^@a^@r^@s^@e^@>^@>^@[^@/^@t^@r^@n^@]^@[^@/^@m^@]^@
^@ ^@[^@m^@2^@]^@[^@c^@ ^@c^@r^@i^@m^@s^@o^@n^@]^@[^@b^@]^@A^@n^@t^@ó^@n^@i^@m^@o^@s^@[^@/^@b^@]^@[^@/^@c^@]^@[^@/^@m^@]^@
^@ ^@[^@m^@2^@]^@[^@i^@]^@[^@c^@ ^@g^@r^@e^@e^@n^@]^@v^@e^@r^@b^@o^@[^@/^@c^@]^@[^@/^@i^@]^@[^@/^@m^@]^@
我尝试在 vim 中删除这个字符
%s/<Ctrl-V><Ctrl-J>//g
但是,然后我保存文件,它的编码又是 iso-8859-1 。我希望显示的文件不带 ^@ 字符,因为我可能需要手动编辑字典中的一些标题。
答案1
您vim
尚未识别编码,并将 16 位字符显示为 8 位字符。标记^@
代表高阶 8 位,对于常见的拉丁字符来说,其值为零。
您可以在读入文件后键入此内容以强制识别UTF-16LE
:e ++enc=utf-16le
(信用:堆栈溢出)
似乎这也可行,但我还不清楚它是否理想
vim -c 'e ++enc=utf-16le' dictionary.dsl
最后,从你的评论似乎一个物料清单是可以接受的。你不能使用iconv
添加 BOM 但您可以自己添加一个
(
printf "%s" $'\xFF\xFE'
iconv -f iso-8859-1 -t utf-16le dictionary.dsl
) > dictionary-utf16le.dsl
确认
file dictionary-utf16le.dsl
dictionary-utf16le.dsl: Little-endian UTF-16 Unicode text