この質問に触発され、iconv
コマンドを使用して、BOMと指定されたエンディアンでUTF-16出力を生成できますか?
このiconv
コマンドは、テキストをあるエンコーディングから別のエンコーディングに変換します。
例えば:
echo hello | iconv -f ascii -t utf-16
のUTF-16表現を生成します"hello\n"
。
UTF-16ファイルは、常にではありませんが、Unicode文字の2バイトエンコーディングであるバイトオーダーマーク(BOM)で始まることがよくありますU+FEFF
。最初の2バイトがFE FF
またはであるかどうかを確認することにより、BOMを含むUTF-16ファイルのエンディアンを判別できますFF FE
。
このiconv
コマンドには、UTF-16出力を生成するためのいくつかのオプションがあります。
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
このコマンド:
echo hello | iconv -f ascii -t utf-16be
BOMなしでビッグエンディアンUTF-16 を生成します。エンディアンを指定した場合、出力でそれを示す必要がないと想定しているようです。同様に、utf-16le
BOMなしのリトルエンディアンUTF-16を生成します。
この:
echo hello | iconv -f ascii -t utf-16
(私のx86 Ubuntuシステムで)BOMを使用してリトルエンディアンUTF-16 を生成します-しかし、リトルエンディアンシステムであっても、BOMを使用してビッグエンディアンUTF-16を生成する同様のコマンドのレポートを見ました。
いつでも手動でBOMを使用しutf-16be
たりutf-16le
、先頭に追加したりできますが、iconv
コマンドを使用するだけの解決策を探しています。
エンディアンが生成するものを知っている場合の別の回避策は、次のとおり-t utf-16
です。
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
私は思います好きな使用にはのようなものです:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
それiconv
はサポートしていません。
編集:
x86 Mac OSXシステムにアクセスできる誰かが、次のコマンドの(コピーアンドペーストされた)出力を示すコメントを投稿できますか?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
-そして、なぜ-t utf-16
エンディアンを無制限のままにしたように思われるのかと思っています。