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

Когда я пишу:

file file1.txt 

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

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

file file2.txt 

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

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

echo $var > "file2.txt"

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

3 ответа

Решение

Ты можешь использовать iconv преобразовать кодировку файла:

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

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

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

echo $var | iconv -f ascii -t utf16 > "file2.txt"

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

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt

При конвертации вашего файла вы должны быть уверены, что он содержит метку порядка байтов. Хотя в стандарте говорится, что метка порядка следования байтов не рекомендуется для 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
Другие вопросы по тегам