Ändern Sie die Kodierung der TXT-Datei

16

Wenn ich schreibe:

file file1.txt 

Ich habe diese Ausgabe: Little-Endian-UTF-16-Unicode-Text mit CR-Zeilenabschluss

Wenn ich dann schreibe:

file file2.txt 

Ich habe: ASCII-Text

file2.txt wird erstellt durch:

echo $var > "file2.txt"

Ich möchte, dass file2.txt die gleiche Kodierung hat wie file1.txt. Wie kann ich das machen ?

Pierre
quelle

Antworten:

25

Mit können Sie iconvdie Kodierung der Datei konvertieren:

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

another.txt sollte dann die gewünschte codierung haben.

Sie können dies auch versuchen:

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

Verwenden Sie iconv:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
Aluísio ASG
quelle
0

Stellen Sie beim Konvertieren Ihrer Datei sicher, dass sie eine Markierung für die Bytereihenfolge enthält. Obwohl der Standard besagt, dass eine Markierung für die Bytereihenfolge für UTF-8 nicht empfohlen wird , kann es zu legitimen Verwechslungen zwischen UTF-8 und ASCII ohne Markierung für die Bytereihenfolge kommen .

Zusätzlich spezifiziert UTF-16BEoder UTF-16LE nicht eine Byte-Reihenfolge - Marke nicht voranstellen , so dass ich ersten Konvertit UTF-16, die eine plattformabhängige endianness verwendet. Dann benutze ich file, um die tatsächliche Endianität zu bestimmen und umzuwandeln UTF-16LE.

Schließlich, wenn Sie eine Datei mit erstellen bash, erhält die Datei bash‚s - locale charmapCodierung, so dass das , was Sie brauchen , um Karte aus.

(Ich schreibe alle meine Kodierungen in Großbuchstaben, da bei Auflistung aller iconvunterstützten Kodierungen iconv -lalle in Großbuchstaben geschrieben sind.)

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
Heidegrenzen
quelle
Wenn Sie dies ablehnen, erklären Sie warum?
Heath Borders