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-16BE
o 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 file
para determinar la endianness real y la conversión de eso a UTF-16LE
.
Finalmente, cuando crea un archivo usando bash
, el archivo recibe bash
la locale charmap
codificación, por lo que es lo que necesita para mapear.
(Pongo en mayúscula todas mis codificaciones porque cuando enumeras todas iconv
las 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