ファイルに奇妙な文字がなくてもファイルをUTF-16LEエンコーディングに正しく変換するにはどうすればよいですか?

ファイルに奇妙な文字がなくてもファイルをUTF-16LEエンコーディングに正しく変換するにはどうすればよいですか?

変換したい.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]

Goldendictはスペイン語のアクセント文字の代わりにいくつかのキリル文字をレンダリングするため、UTF-16LEに変換する必要があります。次に、次のことを試してください。

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

最後に、あなたのコメントそうだ品目明細これは許可されます。あなたサービスの中断iconvBOMを追加できます。自分で追加

(
    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

おすすめ記事