Cambia la codifica del file txt


16

Quando scrivo:

file file1.txt 

Ho questo risultato: testo Unicode Little-endian UTF-16, con terminatori di linea CR

Quindi se scrivo:

file file2.txt 

Ho: testo ASCII

file2.txt viene creato effettuando:

echo $var > "file2.txt"

Vorrei che file2.txt avesse la stessa codifica di file1.txt. Come lo posso fare ?

Risposte:


25

Puoi usare iconvper convertire la codifica del file:

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

another.txt dovrebbe quindi avere la codifica desiderata.

Puoi anche provare questo:

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

7

Usa iconv:

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

0

Quando converti il ​​tuo file, dovresti essere sicuro che contenga un segno di ordine byte. Anche se lo standard dice che un segno di ordine di byte non è raccomandato per UTF-8 , ci possono essere legittime confusioni tra UTF-8 e ASCII senza un segno di ordine di byte .

Inoltre, specificando UTF-16BEo UTF-16LE non anteporre un contrassegno di ordine byte , quindi prima converto UTF-16, che utilizza un endianness dipendente dalla piattaforma. Quindi, utilizzo fileper determinare l'effettiva endianness e la conversione da quella a UTF-16LE.

Alla fine, quando crei un file usando bash, il file riceve bashla locale charmapcodifica, quindi è quello che devi mappare.

(Ho maiuscole tutte le mie codifiche perché quando elenchi tutte iconvle codifiche supportate con iconv -lsono tutte maiuscole.)

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

Se lo declassassi, spiegheresti perché?
Heath Borders,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.