2007年04月18日

◆ UTF-8 と検索

 UTF-8 のファイルには、致命的と言えそうな難点がある。WindowsXP では、エクスプローラで検索ができないのだ。 ──

 このことは、次の二点で確認できる。
  ・ 半角の英数字(例: ABC987)で検索する。
  ・ 漢字やカナ(例:日本政府)で検索する。

 WindowsXP のエクスプローラでフォルダ内のファイル検索をすると、半角英数字で検索するなら検出されるが、漢字やカナで検索するなら検出されない。

 もちろんこれは、UTF-8 のファイルに限った話だ。シフトJISのファイルならば問題はない。また、 unicode (UTF-16LE, UTF-16BE)でも、問題はない。一方、EUC や JIS (ISO 2022 JP)では、検出されない。

 ──

 以上のことから、少なくとも WindowsXP の環境では、テキストファイルとしてなら、UTF-8 のエンコードを利用することはお勧めできない。
 どうしても unicode にするなら、unicode (UTF-16LE, UTF-16BE)がお勧めである。どちらかと言えば、UTF-16LE の方がいいだろう。(Windows の仕様の適合度から。)

 一般に、UTF-8 は通信のためには便利そうなのだが、実装の点では(たぶん可変長のシステムのせいで?)いろいろとトラブルが起こりがちだ。これまでにもかなりトラブルが見つかっている。
 その点、UTF-16LE なら、トラブルがあっても自動的に解消するシステムが備わっていることが多い。(たぶん BOM が付いているせいだろう。……違うかもしれないが。) 
 というわけで、UTF-8 よりは、UTF-16LE の方がお勧めである。UTF-8 を使うのは、HTML ファイルに限定した方が良さそうだ。(WindowsXP の環境では。他のOSでは事情は別。とはいえ、現状では世間の圧倒的多数は WindowsXP である。この事実を無視できない。)

 ──

 HTML ファイルにおいては UTF-16LE よりも UTF-8 の方がいいか? 一応、そうだと思える。たとえば、ケータイ用のブラウザは、 UTF-16LE でなく UTF-8 に対応していることが多いようだ。
 とはいえ、ケータイを対象とするのならば、シフトJISにするのがベスト。
 一方、PC用のブラウザならば、 UTF-16LE も UTF-8 もどちらも大丈夫。
 となると、 UTF-8 がことさらよい、ということにはならないようだ。

 ──

 まとめて言えば、 UTF-8 は、HTML ではかなり普及しているのだが、特にこれを使うべきだという有利な点はあまり見当たらない。他のエンコードと比べて、ドングリの背比べふうであり、頭一つ突き出ているわけではない。
 私としては、UTF-8 はあまりお勧めしない。シフトJISにするか、UTF-16LE にするか、どちらかがお勧め。 UTF-8 は、多くの点で欠点が少ないのだが、多くの点で長所が少ないので、結局、中途半端すぎる。帯に短し襷に流し。
 「欠点の少ないものを一つ選ぶ」のであれば、UTF-8 がベストであろうが、私としては、「長所の多いものを複数とって切り替える」という方がベストであると思う。

 ──

 結論。
 結論としてのお勧めは:
  ・ 素人ならば UTF-8 に統一する。(切り替え利用ができないので。)
  ・ 素人以上ならば、シフトJISと UTF-16LE で、切り替え利用をする。




  【 追記 】

 下記のコメント欄に記されてあるように、UTF-8 では grep がうまくできない、という問題があるようだ。
 UTF-8 で grep ができるソフトは非常に少ない。また、実際に UTF-8 で grep ができるソフトは、あるにはあるが、ものすごく遅いらしい。通常の数十倍の遅さ。( Google 検索で調べた結果。)

 ──

 あれこれ考えて思うに、UTF-8 については、次のように評価できそうだ。
 「 UTF-8 は、欧米語を基本とした上で、その拡張をしたもの」

 つまり、欧米語を使う文化圏(特に英語圏)では、「標準 + 拡張」という形になるので、非常に便利なのだが、他の文化圏(特にアジアやイスラム)では、何のメリットもないまま、「可変長」というデメリットばかりが非常に大きくのしかかる。

 結果的に、欧米語が大好きな人々(たとえば HTML ソースのタグを重視する人)だと、UTF-8 を好むのだが、欧米語で書くことなんかめったにないという人にとっては、UTF-8 は「百害あって一利なし」というふうになりそうだ。

 …… と書くと、UTF-8 の信者に文句を言われそうだが、それにしても、UTF-8 にはまさしく「信者」と呼ぶにふさわしい狂信的な信仰者が多い。どうしてでしょうかね?
 これは、私にもわかりません。謎。(私の頭が悪いせいかも。 ふらふら )
posted by 管理人 at 23:52| Comment(9) |  文字規格 | 更新情報をチェックする
この記事へのコメント
えーと、エクスプローラでのファイル検索の問題ですよね?
そこは確かに素人がひっかかる部分でしょうけど、素人以上だとエクスプローラ以外で検索するんじゃ無いでしょうか?

文字コードの問題があるから、私は昔からエクスプローラーの検索を大してアテにしてません。
忘れた頃にたまに使う程度です。

私は普段エディタのGREP使ってます。
今の世間では(素人以上は)Google Desktopとか(あるいはそれ以上の)高機能な検索ツールを使ってるのでは無いでしょうか?
Posted by pochi-p at 2007年04月19日 04:35
> エディタのGREP

私も使いたいので、UTF-8 の GREP を使えるエディタを教えてください。
Posted by miss at 2007年04月19日 09:17
あのぉ〜、“素人”ならば そもそも UTF−8に統一するなんてこともわからないのではないでしょうか?“素人”とは、文字コードすら意識していないIT利用者でしょ。例えば、私みたいにね。
Posted by ヒミツのアッコチャン at 2007年04月19日 15:05
追記しました。
 タイムスタンプは、下記。 ↓
Posted by 管理人 at 2007年04月20日 01:03
> 「 UTF-8 は、欧米語を基本とした上で、その拡張をしたもの」
フランス語もドイツ語もダイアクリティカルマーク付き文字は2バイトの可変長コードになっちゃいますが。

シフトJISってケータイサイトなどのニッチ以外需要ありますか?
Posted by 金糸雀 at 2007年04月20日 06:56
> フランス語もドイツ語もダイアクリティカルマーク付き文字は2バイトの可変長コードになっちゃいますが。

 欧米語ではもちろん、日本語の規格であるシフトJISは使わず、欧米語の規格である iso-8859-1 が多く使われています。iso-8859-1 では、ダイアクリティカルマーク付き文字も1バイトで表現されます。
 iso-8859-2 East Europe や iso-8859-5 Russia も同様。

 ただし、これらの欧米語のテキストファイルを作成することは、日本語のOSの上では困難であるようです。
( ※ iso-8859 の文字をコピーすると、自動的にシフトJIS の文字だと判定されて、 unicode で内部処理されてしまうため。コピーしないでバイナリのまま扱うのならば大丈夫だが、バイナリエディタを使わないと加工が難しい。)

 ──

 ただし、UTF-8 では、ダイアクリティカルマーク付き文字は2バイトの可変長コードになります。その意味では、おっしゃるとおり。
 とはいえ、ダイアクリティカルマークなしの大多数の文字は、UTF-8 でも1バイトです。

 そもそも、「UTF-8 ではアルファベットの多くが1バイトで表現できて便利だ」ということは、 UTF-8 を支持する人の主張です。
 ご指摘の件は、私に言うよりは、UTF-8 の支持者に向かって言ってください。「そんなことはないぞ、あんたは間違っている。UTF-8 なんてたいして便利じゃない」という批判は、私に言うべきことではなく、 UTF-8 を支持する人に言うべきことです。

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

> シフトJISってケータイサイトなどのニッチ以外需要ありますか?

 本ブログがそうです。このブログはシフトJISでしか表現できません。
 そういうブログに来て、上記のことを言うのは、自己矛盾でしょう。

 その他、多くのアプリが unicode にうまく対応していません。たとえば Visual Basic がそう。(先日に既述。)
  unicode にうまく対応していないアプリは(少なくとも現時点では)たくさんあります。気づいていない素人も多いですけどね。で、それについて啓蒙するのが、本サイト。

 どちらかと言えば、UTF-8 は、通信の用途以外には、需要はないでしょう。というか、たとえ需要があっても、あまり使うべきではない。(ただし素人以上の場合。素人は別。)

 ──

 なお、「 UTF-8 への統一ができないこと」の理由を、ここではっきり述べておきます。それは、「過去の文書を変換できないこと」です。
 シフトJISやiso-8859-1 で書かれた HTML ファイルは世界中に膨大にあります。これらの文書は、文字コードを指定してある限り、何の不自由もなく正常に表示されます。もちろん、あえて UTF-8 へ変換する必要は、まったくありません。
 とすれば、「 UTF-8 への統一をすること」というのは、莫大な手間がかかる割に、メリットはほとんど皆無です。そんなことは、誰もやりません。
 また、すでに死亡した人や解散した会社もあるので、そういう人や会社の文書を勝手にいじることは、法的に違法です。

 さらに言えば、その変換をやったことで、「HTMLファイルが文字化けする」という問題も、あちこちで多大に発生します。下記のコメントを参照。
 http://openblog.meblog.biz/article/61959.html
   at 2007年04月07日 10:13 〜  at 2007年04月11日 18:54

 たとえば、このブログでこの文章を UTF-8 のファイルに変換すると、すべて完全に文字化けして、何一つ読めなくなります。(サーバーのせいで。)
 というわけで、「 UTF-8 のファイルに統一する」ということは、労が多いので不可能だし、仮に可能だとしても実行すればとんでもない厄災が起こる。

 ──

 たとえ話で言うと、「 UTF-8 に統一すると便利だから、 UTF-8 に統一せよ」という主張は、「英語に統一すると便利だから、 英語に統一せよ(ローカルな日本語なんか廃止してしまえ)」という主張と同様です。
 なるほど、ブッシュならばそう主張するだろうし、小泉もそれに賛同するでしょうね。英語好きや、UTF-8 の信者もそうでしょう。しかし、残念ながら、私はローカルな日本語を廃止したくありません。悪しからず。
(……というたとえ話を書くと、また信者が怒り狂いそうだが。)

 ※ よく考えみると、これに似たことは、前にもあった。それは「正字なんていうのは廃止して、略字の字体に統一せよ。統一する方が、統一感があって、いい」という略字派の主張だ。
 あのときも、略字派(≒ 統一派)から、私は大攻撃を受けたものだ。いつの時代でも、統一派は、現状維持派を攻撃する。
 なるほど。ここまで考えると、ようやくわかってくる。つまり、新興宗教と同じなんですね。彼らは、自分たちの教祖(または神)を否定する世俗主義者を、すごく嫌うわけだ。

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 《 注記 》
 初心者向けの解説。
 ここで言う「シフトJIS」とは、シフトJISのほか、EUC-JP, iso-2022-jp, iso-8859-1 などをすべて含む。つまり、ローカルコードのこと。
 ここでは、「ローカルコードが現実に多様に使われているから、ローカルコードを捨てることはできない(統一することは無理だ)」というふうに「不統一」を述べている。
 ゆえに、次のような変な主張をしてはならない。
 「シフトJISがいいからとって、シフトJISに統一するのは無理だ」
 「シフトJISのほかに EUC-JP もあるぞ」
 ま、茶々を入れるなら別ですけどね。  (^^);
 ともあれ、「シフトJISがいいから、シフトJISに統一せよ」と主張しているわけではない。勘違いしないこと。(初心者にはありがちな勘違い。)
Posted by 管理人 at 2007年04月20日 20:08
上記のコメントへの補足。

 欧米で主流の文字コードは、iso-8859-1 であるようだ。HTML ファイルでも同様である。Yahoo (独・仏)のトップページでは、UTF-8 が使われているが、その下の個別ページでは、iso-8859-1 であることが多い。まして、普通の個人が作る要なさいとでは、多くが iso-8859-1 であるようだ。
( ※ もちろん、間違いではないし、それで何ら不都合はない。)

 ただし、日本にいる日本人が iso-8859-1 のテキストファイルを使おうとすると、かなり面倒である。その事情は、上記のコメントで記したとおり。
 ただし、より正確に書けば、これは OSに依存するのではなく、アプリに依存する。(OSに依存するように書いたのは誤り。)

 アプリではどうするかと言うと、次のいずれかの方式を使う。
  ・ iso-8859-1 のエディタを使う。
  ・ ワープロを使う。
 具体的に言えば、次の通り。

 (1) エディタの場合、文字コードを切り替えることはできない。初めからエディタを和文モードにするか欧文モードにするか、どちらか。QXエディタならば、起動時に起動オプションを使って、欧文モードで起動する。秀丸エディタならば、フォントを切り替えて、欧文フォントモードで使う。……いずれの場合も、エディタが欧文モードになる。
(なお、QXと秀丸以外のエディタでは、このように欧文モードで使うことはできないようだ。保存時には、iso-8859-1 で保存することはできず、日本語モードでしか保存できない。すると、飾り付きのアルファベットは、飾りが消えてしまう。)

 (2) ワープロの場合、対処は比較的容易である。ワープロそのものは内部処理で unicode を使っているから、あとは保存時に「iso-8859-1」を指定すればよい。MS-Wordならば、「テキストファイルの保存」を指定するときに、文字コードとして「その他」のうちから、「西ヨーロッパ言語(Windows)」を指定すればよい。
 このように、操作そのものはわかりやすいが、ちょっと手間がかかる。毎度毎度、ダイアログボックスで操作する必要がある。(1) に比べると、手間が面倒だ。(30秒ぐらいで済むが。)

 ──

 というわけで、日本人が欧文モードをちょいちょい使いたいのであれば、 unicode を使う方がベストでしょう。
 ローカルなエンコードはローカルな使用でのみ使える。多言語使用ならば unicode を使う方がいい。当り前ですね。
( unicode を基本とした上で、たまに iso-8859-1 を使うのもいいが、やはり、日本人なら、欧文は unicode を使う方がいいでしょう。iso-8859-1 のテキストファイルとシフトJISのテキストファイルが混在するのは、好ましくない。)
( 私は? フランス語やドイツ語のテキストファイルを書くことは絶対にないので、関係ない。……たいていの人がそうですね。  (^^); )
Posted by 管理人 at 2007年04月21日 00:10
少しお邪魔します。
> missさん & 南堂さん
私は秀丸エディタv4.19でGREPしています。
UTF-8とシフトJISをまとめて検索してくれてます。
普段使っているファイルでは特に問題無かったです。

南堂さんが他のエントリで書かれてる内容までは追えていないので、もしかしたら何か問題があったりなかったりするかもしれませんが……。
Posted by pochi-p at 2007年04月24日 01:59
> 秀丸エディタ

 なるほど。秀丸でできるんですね。4200円かかるところが一般向けではないが。

 ただ、最新版は ver6 になっていて、アウトラインまでできるようになっています。びっくり。いつのまにか高機能化している。

 ただし、使い方が難しくて普通の人にはわかりにくいのは、相変わらず。
 また、カラー表示のカスタマイズは、前のバージョンではあったのに、今のバージョンではいつのまにかなくなってしまっています。

 ただ、キーカスタマイズの範囲がいくらか広がっているので、私としては「これは使えるエディタだ」と思えます。前のバージョンではそうではなかったんだけど。けっこういいエディタになっていますね。(素人には使いこなすのは大変そうだが。)

 あ、そうそう。UTF-8 の検索も、いちいちカスタマイズしないと、検索できません。ほんと、扱いにくいエディタです。じゃじゃ馬みたい。

 ──

 【 余談 】

 秀丸への余談。
 秀丸は、機能的には、非常に高いレベルになっていて、総合点では トップのエディタであると思えるだけに、メニューやダイアログボックスやヘルプをもっと初心者にもわかりやすいようにしてくれるといいんですけどね。そうすれば初心者でも使えるようになって、売上げももっと増えるはずなんだが。
Posted by 管理人 at 2007年04月24日 22:43
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

  ※ コメントが掲載されるまで、時間がかかることがあります。

過去ログ