Zainspirowany tym pytaniem , czy mogę użyć iconvpolecenia do wygenerowania wyjścia UTF-16 z BOM i określoną endianią?
iconvTekst nawróceni polecenie z jednego kodowania do innego.
Na przykład:
echo hello | iconv -f ascii -t utf-16
generuje reprezentację UTF-16 dla "hello\n".
Pliki UTF-16 często, ale nie zawsze, zaczynają się od znaku Byte Order Mark (BOM), który jest 2-bajtowym kodowaniem znaku Unicode U+FEFF. Możesz określić endianowość pliku UTF-16 z BOM, sprawdzając, czy pierwsze dwa bajty to FE FFlub FF FE.
iconvKomenda ma kilka opcji do generowania UTF-16 dane wyjściowe:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
To polecenie:
echo hello | iconv -f ascii -t utf-16be
generuje big-endian UTF-16 bez BOM ; wydaje się zakładać, że jeśli określono endianness, nie trzeba wskazywać go w danych wyjściowych. Podobnie, utf-16legeneruje little-endian UTF-16 bez BOM.
To:
echo hello | iconv -f ascii -t utf-16
generuje (w moim systemie x86 Ubuntu) little-endian UTF-16 z BOM - ale widziałem raport o podobnym poleceniu generującym big-endian UTF-16 z BOM, nawet w systemie little-endian.
Zawsze mogę ręcznie użyć BOM utf-16belub utf-16leuzupełnić go, ale szukam rozwiązania, które po prostu używa iconvpolecenia.
Innym obejściem, jeśli wiesz, co -t utf-16powoduje endianizm , jest:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Co ja lubię do użytku jest coś takiego:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
ale iconvtego nie obsługuje.
EDYTOWAĆ :
Czy ktoś mający dostęp do systemu Mac OSX x86 może opublikować komentarz pokazujący (skopiuj i wklej) dane wyjściowe następującego polecenia?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv- i zastanawiam się, dlaczego -t utf-16wydaje się, że endianness nie jest określony.
iconv -f UTF-8 -t UTF-16, uruchom na systemie little-endian (MacOS), generując big-endian UTF-16 z BOM, co wydaje się bardzo dziwne.