Ispirato da questa domanda , posso usare il iconv
comando per generare output UTF-16 con una distinta base e con endianness specificato?
Il iconv
comando converte il testo da una codifica a un'altra.
Per esempio:
echo hello | iconv -f ascii -t utf-16
genera una rappresentazione UTF-16 di "hello\n"
.
I file UTF-16 spesso, ma non sempre, iniziano con un Byte Order Mark (BOM), che è una codifica a 2 byte del carattere Unicode U+FEFF
. È possibile determinare l'endianità di un file UTF-16 con BOM controllando se i primi due byte sono FE FF
o FF FE
.
Il iconv
comando ha diverse opzioni per generare output UTF-16:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Questo comando:
echo hello | iconv -f ascii -t utf-16be
genera UTF-16 big-endian senza BOM ; sembra supporre che se si specifica l'endianness, non è necessario indicarlo nell'output. Allo stesso modo, utf-16le
genera UTF-16 little-endian senza BOM.
Questo:
echo hello | iconv -f ascii -t utf-16
genera (sul mio sistema Ubuntu x86) UTF-16 little-endian con una BOM - ma ho visto un rapporto di un comando simile che genera UTF-16 big-endian con una BOM, anche su un sistema little-endian.
Posso sempre utilizzare utf-16be
o utf-16le
anteporre manualmente la distinta componenti, ma sto cercando una soluzione che utilizza solo il iconv
comando.
Un'altra soluzione alternativa, se sai cosa -t utf-16
genera endianness , è:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Quello che mi piace da utilizzare è qualcosa di simile:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
ma iconv
non lo supporta.
MODIFICARE :
Qualcuno con accesso a un sistema Mac OSX x86 può pubblicare un commento che mostra l'output (copia e incolla) del seguente comando?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- e mi chiedo perché -t utf-16
sembra lasciare l'endianità non specificata.
iconv -f UTF-8 -t UTF-16
, funziona su un sistema little-endian (MacOS), generando UTF-16 big-endian con una distinta base, che sembra molto strano.