Перетворюючи файл, ви повинні бути впевнені, що він містить позначку порядку байти. Навіть незважаючи на те, що стандарт каже, що байт-порядок не рекомендований для 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