Bu sorudan esinlenerek iconv
, bir BOM ve belirtilen endianness ile UTF-16 çıktısı oluşturmak için komutu kullanabilir miyim ?
iconv
Baş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 FF
veya FF FE
.
iconv
Komut 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-16le
BOM 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-16be
veya utf-16le
başa başlayabilirim , ancak sadece iconv
komutu 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 iconv
bunu 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-16
endianness belirtilmemiş bırakmak gibi görünüyor merak ediyorum .
iconv -f UTF-8 -t UTF-16
biraz endian bir sistemde (MacOS) çalışarak, çok garip görünen bir BOM ile big-endian UTF-16 ürettiğini gösteriyor.