Inspirado por esta pregunta , ¿puedo usar el iconv
comando para generar una salida UTF-16 con una lista de materiales y con especificidad?
El iconv
comando convierte el texto de una codificación a otra.
Por ejemplo:
echo hello | iconv -f ascii -t utf-16
genera una representación UTF-16 de "hello\n"
.
Los archivos UTF-16 a menudo, pero no siempre, comienzan con una marca de orden de bytes (BOM), que es una codificación de 2 bytes del carácter Unicode U+FEFF
. Puede determinar la endianness de un archivo UTF-16 con BOM comprobando si los dos primeros bytes son FE FF
o FF FE
.
El iconv
comando tiene varias opciones para generar la salida UTF-16:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Este comando:
echo hello | iconv -f ascii -t utf-16be
genera UTF-16 big-endian sin BOM ; parece suponer que si especificó el endianness, no necesita indicarlo en la salida. Del mismo modo, utf-16le
genera little-endian UTF-16 sin BOM.
Esta:
echo hello | iconv -f ascii -t utf-16
genera (en mi sistema Ubuntu x86) little-endian UTF-16 con una BOM, pero he visto un informe de un comando similar que genera UTF-16 big-endian con una BOM, incluso en un sistema little-endian.
Siempre puedo usar utf-16be
o utf-16le
y anteponer la lista de materiales manualmente, pero estoy buscando una solución que solo use el iconv
comando.
Otra solución, si sabes lo que -t utf-16
genera endianness , es:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Lo que me gustaría usar es algo como:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
Pero iconv
no es compatible con eso.
EDITAR:
¿Alguien con acceso a un sistema Mac OSX x86 puede publicar un comentario que muestre el resultado (copiar y pegar) del siguiente comando?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
, y me pregunto por qué -t utf-16
parece dejar el endianness sin especificar.
iconv -f UTF-8 -t UTF-16
, ejecutar en un sistema little-endian (MacOS), generando UTF-16 big-endian con una lista de materiales, lo que parece muy extraño.