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 ?
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"
Utilisez iconv:
echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
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-16LE
ne 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