web-dev-qa-db-ja.com

txtファイルのエンコードを変更する

私が書くとき:

file file1.txt 

この出力があります:リトルエンディアンUTF-16 Unicodeテキスト、CR行ターミネーター付き

次に、私が書く場合:

file file2.txt 

私は持っています:ASCII text

file2.txtは次のように作成して作成します。

echo $var > "file2.txt"

File2.txtは、file1.txtと同じエンコードにする必要があります。どうやってやるの ?

16
Pierre

iconvを使用して、ファイルのエンコーディングを変換できます。

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

another.txtには、目的のエンコーディングが必要です。

これを試すこともできます:

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

Iconvを使用:

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

ファイルを変換するときは、必ずバイトオーダーマークが含まれている必要があります。 TF-8ではバイトオーダーマークは推奨されていません ですが、 TF-8とASCII =バイトオーダーマークなし

さらに、UTF-16BEまたはUTF-16LEバイト順マークを付加しない を指定するため、最初にプラットフォーム依存のエンディアンを使用するUTF-16に変換します。次に、fileを使用して実際のエンディアンを決定し、それからUTF-16LEに変換します。

最後に、bashを使用してファイルを作成すると、ファイルはbashlocale 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
0
Heath Borders