Cambiar la codificación del archivo txt

16

Cuando yo escribo :

file file1.txt 

Tengo esta salida: texto Unicode UTF-16 little endian, con terminadores de línea CR

Entonces si escribo:

file file2.txt 

Tengo: texto ASCII

file2.txt se crea haciendo:

echo $var > "file2.txt"

Me gustaría que file2.txt tenga la misma codificación que file1.txt. Cómo puedo hacer eso ?

Pierre
fuente

Respuestas:

25

Puede usar iconvpara convertir la codificación del archivo:

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

another.txt entonces debería tener la codificación deseada.

También puedes probar esto:

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

Use iconv:

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

Al convertir su archivo, debe asegurarse de que contenga una marca de orden de bytes. Aunque el estándar dice que no se recomienda una marca de orden de bytes para UTF-8 , puede haber confusiones legítimas entre UTF-8 y ASCII sin una marca de orden de bytes .

Además, especificando UTF-16BEo UTF-16LE no antepone una marca de orden de bytes , por lo que primero convierto a UTF-16, que usa una endianness dependiente de la plataforma. Luego, uso filepara determinar la endianness real y la conversión de eso a UTF-16LE.

Finalmente, cuando crea un archivo usando bash, el archivo recibe bashla locale charmapcodificación, por lo que es lo que necesita para mapear.

(Pongo en mayúscula todas mis codificaciones porque cuando enumeras todas iconvlas codificaciones admitidas iconv -l, todas son mayúsculas).

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
Heath Borders
fuente
Si rechazaras esto, ¿explicarías por qué?
Heath Borders