私が書くとき:
file file1.txt
この出力があります:リトルエンディアンUTF-16 Unicodeテキスト、CR行ターミネーター付き
次に、私が書く場合:
file file2.txt
私は持っています:ASCII text
file2.txtは次のように作成して作成します。
echo $var > "file2.txt"
File2.txtは、file1.txtと同じエンコードにする必要があります。どうやってやるの ?
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
ファイルを変換するときは、必ずバイトオーダーマークが含まれている必要があります。 TF-8ではバイトオーダーマークは推奨されていません ですが、 TF-8とASCII =バイトオーダーマークなし 。
さらに、UTF-16BE
またはUTF-16LE
バイト順マークを付加しない を指定するため、最初にプラットフォーム依存のエンディアンを使用するUTF-16
に変換します。次に、file
を使用して実際のエンディアンを決定し、それからUTF-16LE
に変換します。
最後に、bash
を使用してファイルを作成すると、ファイルはbash
の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