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

관련 정보