Изменить кодировку TXT-файла

16

Когда я пишу:

file file1.txt 

У меня есть этот вывод: Little-endian UTF-16 текст Unicode, с символами конца строки CR

Тогда если я напишу:

file file2.txt 

У меня есть: текст ASCII

file2.txt создается путем:

echo $var > "file2.txt"

Я хотел бы, чтобы file2.txt имел ту же кодировку, что и file1.txt. Как я могу это сделать ?

пьер
источник

Ответы:

25

Вы можете использовать iconvдля преобразования кодировки файла:

iconv -f ascii -t utf16 file2.txt > another.txt

another.txt должен иметь желаемую кодировку.

Вы также можете попробовать это:

echo $var | iconv -f ascii -t utf16 > "file2.txt"
Der Hochstapler
источник
7

Используйте iconv:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
Aluísio ASG
источник
0

При конвертации вашего файла вы должны быть уверены, что он содержит метку порядка байтов. Несмотря на то, что в стандарте говорится, что метка порядка байтов не рекомендуется для UTF-8 , между UTF-8 и ASCII могут быть законные путаницы без метки порядка байтов .

Кроме того, указание UTF-16BEили UTF-16LE не предшествует метка порядка байтов , поэтому я сначала преобразовать в UTF-16, который использует зависящий от платформы порядковый номер. Затем я использую fileдля определения фактического порядка байтов и преобразования из этого в UTF-16LE.

Наконец, при создании файла с помощью bashфайл получает bash«s locale charmapкодировку, так это то, что вам нужно сопоставить с.

(Я пишу все мои кодировки в верхнем регистре, потому что, когда вы перечисляете все iconvподдерживаемые кодировки iconv -l, все они в верхнем регистре.)

BASH_ENCODING="$( locale charmap | tr [:lower:] [:upper:] )"
echo $var | iconv -f "$BASH_ENCODING" -t UTF-16 > UTF-16-UNKNOWN-ENDIANNESS-FILE
FILE_ENCODING="$( file --brief --mime-encoding UTF-16-UNKNOWN-ENDIANNESS-FILE )"
iconv -f "$FILE_ENCODING" -t UTF-16LE UTF-16-UNKNOWN-ENDIANNESS-FILE > file2.txt
Хит Границы
источник
Если бы вы проголосовали против, объясните почему?
Хит Границы