Saat mengonversi file Anda, Anda harus yakin itu berisi tanda byte-order. Meskipun standar mengatakan tanda byte-order-tidak direkomendasikan untuk UTF-8 , mungkin ada kebingungan yang sah antara UTF-8 dan ASCII tanpa tanda byte-order .
Selain itu, menentukan UTF-16BE
atau UTF-16LE
tidak menambahkan tanda byte-order , jadi saya pertama mengonversi ke UTF-16
, yang menggunakan endianness yang bergantung pada platform. Kemudian, saya gunakan file
untuk menentukan endianness aktual dan konversi dari itu ke UTF-16LE
.
Akhirnya, ketika Anda membuat file menggunakan bash
, file menerima bash
's locale charmap
encoding, sehingga ini apa yang Anda butuhkan untuk memetakan dari.
(Saya huruf besar semua pengkodean saya karena ketika Anda mendaftar semua iconv
pengkodean yang didukung dengan iconv -l
mereka semua huruf besar.)
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