변환하려는 .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비트 문자로 표시하고 있습니다. 플래그는 ^@
일반적인 라틴 문자에 대해 값이 0인 상위 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