web-dev-qa-db-fra.com

Changer l'encodage du fichier txt

Quand j'écris:

file file1.txt 

J'ai cette sortie: Texte Unicode UTF-16 Little-endian, avec terminaisons de ligne CR

Alors si j'écris:

file file2.txt 

J'ai: texte ASCII

file2.txt est créé en faisant:

echo $var > "file2.txt"

Je voudrais que file2.txt ait le même encodage que file1.txt. Comment puis je faire ça ?

16
Pierre

Vous pouvez utiliser iconv pour convertir l'encodage du fichier:

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

another.txt devrait alors avoir le codage souhaité.

Vous pouvez aussi essayer ceci:

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

Utilisez iconv:

echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
7
Aluísio A. S. G.

Lors de la conversion de votre fichier, vous devez vous assurer qu'il contient une marque d'ordre des octets. Même si la norme indique qu'une marque d'ordre d'octet n'est pas recommandée pour UTF-8 , il peut y avoir Confusions légitimes entre UTF-8 et ASCII sans marque d'ordre d'octet .

De plus, spécifier UTF-16BE ou UTF-16LEne comporte pas de marque d'ordre d'octet , aussi je convertis d'abord en UTF-16, qui utilise une endianité dépendante de la plate-forme. Ensuite, j’utilise file pour déterminer l’endianité réelle et la conversion de celle-ci en UTF-16LE.

Enfin, lorsque vous créez un fichier à l’aide de bash, il reçoit le codage bash de locale charmap, c’est donc ce dont vous avez besoin de mapper.

(Je mets en majuscule tous mes encodages car lorsque vous listez tous les encodages pris en charge de iconv avec iconv -l, ils sont tous en majuscules.)

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
1
Heath Borders