Bu sorudan esinlenerek iconv, bir BOM ve belirtilen endianness ile UTF-16 çıktısı oluşturmak için komutu kullanabilir miyim ?
iconvBaşka bir kodlama gelen komut dönüştürür metni.
Örneğin:
echo hello | iconv -f ascii -t utf-16
UTF-16 temsili üretir "hello\n".
UTF-16 dosyaları genellikle, ancak her zaman değil, Unicode karakterinin 2 baytlık kodlaması olan bir Bayt Sırası İşareti (BOM) ile başlar U+FEFF. İlk iki bayt olup olmadığını kontrol ederek BOM ile UTF-16 dosyanın endianness'ın belirleyebilir FE FFveya FF FE.
iconvKomut UTF-16 çıkışını üretmek için çeşitli seçenekler vardır:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Bu komut:
echo hello | iconv -f ascii -t utf-16be
BOM olmadan big-endian UTF-16 üretir ; endianness'ı belirttiyseniz, çıktıda belirtmeniz gerekmediği varsayılmaktadır. Benzer şekilde, utf-16leBOM olmadan küçük endian UTF-16 üretir.
Bu:
echo hello | iconv -f ascii -t utf-16
BOM ile küçük endian UTF-16 üretir (benim x86 Ubuntu sistemimde) - ama küçük bir endian sistemde bile bir BOM ile big endian UTF-16 üreten benzer bir komutun bir raporunu gördüm.
BOM'u her zaman manuel olarak kullanabilir utf-16beveya utf-16lebaşa başlayabilirim , ancak sadece iconvkomutu kullanan bir çözüm arıyorum .
Başka bir geçici çözüm, eğer sen endian biliyor -t utf-16üretir şöyledir:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Ne kullanmak istiyorum gibi bir şey:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
ama iconvbunu desteklemiyor.
DÜZENLE :
X86 Mac OSX sistemine erişimi olan biri aşağıdaki komutun (kopyala-yapıştır) çıktısını gösteren bir yorum gönderebilir mi?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv- ve neden -t utf-16endianness belirtilmemiş bırakmak gibi görünüyor merak ediyorum .
iconv -f UTF-8 -t UTF-16biraz endian bir sistemde (MacOS) çalışarak, çok garip görünen bir BOM ile big-endian UTF-16 ürettiğini gösteriyor.