Inspiré par cette question , puis-je utiliser la iconv
commande pour générer une sortie UTF-16 avec une nomenclature et avec une endianité spécifiée?
La iconv
commande convertit le texte d'un encodage en un autre.
Par exemple:
echo hello | iconv -f ascii -t utf-16
génère une représentation UTF-16 de "hello\n"
.
Les fichiers UTF-16 commencent souvent, mais pas toujours, par une marque d'ordre des octets (BOM), qui est un codage sur 2 octets du caractère Unicode U+FEFF
. Vous pouvez déterminer l'endianité d'un fichier UTF-16 avec BOM en vérifiant si les deux premiers octets sont FE FF
ou FF FE
.
La iconv
commande a plusieurs options pour générer une sortie UTF-16:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Cette commande:
echo hello | iconv -f ascii -t utf-16be
génère UTF-16 big-endian sans BOM ; il semble supposer que si vous avez spécifié l'endianité, vous n'avez pas besoin de l'indiquer dans la sortie. De même, utf-16le
génère un UTF-16 peu endian sans BOM.
Ce:
echo hello | iconv -f ascii -t utf-16
génère (sur mon système Ubuntu x86) UTF-16 little-endian avec une nomenclature - mais j'ai vu un rapport d'une commande similaire générant UTF-16 big-endian avec une nomenclature, même sur un système little-endian.
Je peux toujours utiliser utf-16be
ou utf-16le
et ajouter la nomenclature manuellement, mais je recherche une solution qui utilise simplement la iconv
commande.
Une autre solution de contournement, si vous savez ce que l'endianité -t utf-16
génère, est:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Ce que je veux est quelque chose comme à l' utilisation:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
mais iconv
ne supporte pas cela.
ÉDITER :
Une personne ayant accès à un système Mac OSX x86 peut-elle publier un commentaire montrant la sortie (copiée-collée) de la commande suivante?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- et je me demande pourquoi -t utf-16
semble ne pas spécifier l'endianité.
iconv -f UTF-8 -t UTF-16
, exécutée sur un système little-endian (MacOS), générant du big-endian UTF-16 avec une nomenclature, ce qui semble très étrange.