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-16BEatau UTF-16LE tidak menambahkan tanda byte-order , jadi saya pertama mengonversi ke UTF-16, yang menggunakan endianness yang bergantung pada platform. Kemudian, saya gunakan fileuntuk menentukan endianness aktual dan konversi dari itu ke UTF-16LE.
Akhirnya, ketika Anda membuat file menggunakan bash, file menerima bash's locale charmapencoding, sehingga ini apa yang Anda butuhkan untuk memetakan dari.
(Saya huruf besar semua pengkodean saya karena ketika Anda mendaftar semua iconvpengkodean yang didukung dengan iconv -lmereka 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