上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

(なんかこの記事はおかしい、あやしい。追記参照)

環境:
Mac OS X 10.4.10 (PPC)
ターミナル 1.5 - ウインドウ設定の文字セットエンコーディング: Unicode (UTF-8)

まずターミナルを起動して、以下を実行します。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16 >> file.txt

こんなテキストファイルが作成されます。
bom.png

テキストエディタのカーソルを移動して一行目と二行目の間を行ったり来たりしてみて下さい。
追記された二行目の行頭でカーソルが一瞬引っかかりますよね。
iconv で UTF-16 (LE でも BE でもないやつ) に変換されたテキストの先頭には必ず BOM がつくため、追記するたびに文中に見えない文字が増えていくのです。
このままでもとりたてて困ることはないものの、なんとなく気持ちが良くない。
そこで BOM を取り除く定番の方法があるのではと探したのですが、見つけられなかったため次のようにしてみました。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16 | tail -c +3 >> file.txt


先頭 2 バイトが BOM だそうなので、iconv の実行結果から tail -c +3 で 3 バイト目以降を取り出しています。
本当にこのやり方で正しいのかどうかはわかりませんが、今のところトラブルは起きていません。

追記 (070708)
そもそも「UTF-16 に変換してから BOM を削除したい」という考え方をしたのは

cat "UTF-8 のテキストファイル" | iconv -f UTF-8 -t UTF-16BE >> "iconv 経由で UTF-16 にしたテキストファイル"

を実行したときに文字化けして当惑したという経験がきっかけなのですが、ついさっき同じことを試したところ……あれ、文字化けしない?
いやそうなんですけどね。
Mac OS X 10.4.10 の時点で標準インストールされている iconv (GNU libiconv 1.9) がサポートする UTF-16 のエンコーディングは

UTF-16 (BOM 付き - ビッグエンディアン)
UTF-16BE (BOM 無し - ビッグエンディアン)
UTF-16LE (BOM 無し - リトルエンディアン)

の三種類で、UTF-16 (つまり BOM 付きビッグエンディアン) に変換してから書き出したファイルに BOM 無しで追記したかったら UTF-16BE に変換すれば事足りるはずなのです。
ではあのとき文字化けしたのは単なるポカミスだったのかもと思えてきました。
こう書くだけでいいのかもなと。

$ echo "宮﨑あおい" | iconv -f UTF-8 -t UTF-16 > file.txt
$ echo "维吾尔自治区" | iconv -f UTF-8 -t UTF-16BE >> file.txt


ようわからんので何かわかったらまた追記します。

スポンサーサイト

06/29|Macコメント(0)トラックバック(0)TOP↑
この記事にコメント
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。