Deprecated: Function ereg() is deprecated in /virtual/bsakatu/module/xml_declaration.inc on line 4
メモ帳日記 : 電子機器での日本語入力
  1. メモ帳日記 >
  2. PC >
  3. 電子機器での日本語入力

メモ帳日記

日記書いたりメモ書いたり

2007年 2月 11日(建国記念の日 大安

電子機器での日本語入力

最近、パソコンとか携帯電話などの電子機器で日本語を入力する際には、どの句読点を使えばいいのかとか、英数字の前後に 「半角スペース (U+0020)」を入れるかで悩んでいた。で,それらについていろいろ調べていたら,もっと深い問題まで考える羽目になってしまった。もっとも,自分の性格が悪いのだが。

このサイトでは符号化方式に UTF の UTF-8 を採用している。UTF-8 の文字集合は Unicode であり、Unicode において、日本語の読点は 「、 (U+3001)」、句点は 「。 (U+3002)」と定められている。いわゆる全角英数字,全角記号,半角カナが納めされている領域は Halfwidth and Fullwidth Forms であり、この領域にある文字は既存の符号化方式から Unicode へ変換した際に互換性を保つために使用されるものであり,また,Unicode では文字コードと文字の意味は一意に決められている。つまり、日本語であろうと英語であろうと、「, (U+FF0C)」や「? (U+FF1F)」や「! (U+FF01)」や「( ) (U+FF08, U+FF09)」など(他にもまだある)は、Unicode をまともに使うのであれば使うべきではない。というか、Unicode では、カンマは「, (U+002C)」、疑問符は「? (U+003F)」、感嘆符は「! (U+0021)」、小括弧は「( ) (U+0028, U+0029)」なのだ。それ以上でもそれ以下でもない

しかし、これは結構困る。日本語文と欧文とで同じグリフだと,欧文フォントで表示される記号がどう見てもデザイン上おかしく見えてしまい,日本語とあわない。疑問符や感嘆符なら大して違和感はないかもしれないが,例えば小括弧だと以下のような違いが出る。なお、わざと句読点をカンマとピリオドにしてある。

半角記号
メイリオは本文用レギュラーと見出し用ボールドそれぞれで専用のアウトラインデータをもつフォントで, 画面上で見ても印刷しても極めて明瞭で読みやすく, 広い用途に適した新世代のサンセリフ系 (角ゴシック) フォントです.
全角記号
メイリオは本文用レギュラーと見出し用ボールドそれぞれで専用のアウトラインデータをもつフォントで,画面上で見ても印刷しても極めて明瞭で読みやすく,広い用途に適した新世代のサンセリフ系(角ゴシック)フォントです.

恐らく、半角記号のほうは括弧が下がり気味で気持ち悪く感じるであろう。これが、全角記号なら日本語にマッチした表示になる。ほかに、半角小括弧を日本語フォントで表示した場合に日本語とマッチする事が多い。

こうなると困るのが理想をとるか現実をとるかという選択。見た目を重視するなら全角文字を使いたいが、それはあまりよろしくない。あー困る。

さて、実は問題はこれだけではない。有名な問題をあげると、YEN SIGN 問題と WAVE DASH 問題の 2 つがある。

YEN SIGN 問題

この問題は素人の言葉では説明しにくいので、以下の引用と上に示したリンクを参照して欲しい。特に上に示したリンク先のページを読むとよくわかると思う。ただし、それ相応の知識があればだが。

Shift_JISではJIS X 0201における円記号(¥,YEN SIGN)が0x5Cに置かれている。これをUnicodeのマッピングに合わせるとYEN SIGN(U+00A5)にマップされる。しかし、0x5CはASCIIではバックスラッシュ(\)に相当し、C言語などのエスケープシーケンスに使われる事から、この文字のコードを変更すると、コンパイルが通らない、動作に不具合が生じるなどの問題が起きる。そのためUnicodeを利用するアプリケーションは0x007F以下のコードに関しては移動させないと言う暗黙のルールができている。

そうなると、Unicode環境では円記号(¥)がバックスラッシュ(\)の表示に変わってしまうように思われるが、これは日本語用のフォントデータの0x5Cの位置には円記号(¥)の字形を当ててしまうことで対処している(Windowsの場合)。これによって、それまでの文字コードを使用していたときと同じ感覚で円記号(¥)を用いることができる。

この問題は日本語環境に限った事ではない。もともと、ISO646上で0x5Cを含む数種の文字は自由領域(バリアント)として各国での定義を認めていた。そのため、諸外国でもASCIIでバックスラッシュに相当するコードに異なる記号を当てているケースが多い。例えば、大韓民国ではウォン記号(₩)である。

WAVE DASH 問題

Microsoft の Windows において、Shift_JIS (CP932) を Unicode に変換する際に、JIS X 0208 の 1 区 33 点「波ダッシュ」を U+FF5E の FULLWIDTH TILDE に変換する問題。本来は U+301C の WAVE DASH に割り当てられるべきであるが、Microsoft の CP932 ↔ Unicode の変換表では FULLWIDTH TILDE に変換してしまう。ただし,これは一概に Microsoft だけが悪いわけではなく、Unicode を策定する Unicode Consortium にも非がある。

Unicodeの仕様書では、U+301C WAVE DASH(波ダッシュ)に、「JIS punctuation」(The Unicode Standard, Version 2.0より引用, 「JIS約物」の意)という注釈を施しておきながら、JIS X 0208の波ダッシュの例示字形(“上がって下がる” 形「~」)とは異なる形(“下がって上がる”形「╲╱╲」)を印刷してしまった。 このような間違いが発生した理由は、Unicodeの例示字形を検討するグループにいたメンバーの日本語に対する知識が不十分だったために、縦書きの例示字形「╲╱╲ を右に 90 度回転させた文字」を90度回転すればいいと誤って判断してしまったためである。なお、この縦書きの字形については特に混乱は見られない。

この影響を受けて、Microsoft Windows(XP以前)ではUnicodeの波ダッシュ(U+301C, WAVE DASH)は“下がって上がる”形「╲╱╲」で表示される(MS 明朝、MS ゴシック、MS UI Gothicにおけるもの)。それに対し、Shift_JISの波ダッシュ(0x8160, WAVE DASH)はUnicodeの全角チルダ(U+FF5E, FULLWIDTH TILDE)と共通の文字として扱われた上で“上がって下がる” 形「~」で表示されるようになっている。

今回、個人的にいろいろ考える上で YEN SIGN 問題はあまり問題にはならないが、WAVE DASH 問題に関しては大問題だ。日本語文を書く上で、文章中で波線を使用しないというのは難しい。字形の見た目が違うぐらいなら何も気にしないで使うのだが、処理のしかたによっては機種依存文字になってしまう。おまけに、FULLWIDTH TILDE はどうやっても TILDE であるわけで、決して波線にはなり得ない。

そこでじっくりいろいろ調べて考えた結果、わざわざ Unicode で作成したものを CP932 に変換することはほとんど無いのだから、理想をとって WAVE DASH を使うことにした。ただ、「〜 U+301C」は、Windows などの Microsoft 製品の日本語版でコピー & ペーストをして表示すると、"?"に化けることがある。もちろんそれは CP932 ↔ Unicode の変換の時であり、これは、上で示したように Microsoft の変換表がくそで、 Unicode の WAVE DASH に対応する CP932 の文字を定義していないからだ。ちなみに、それ以外の OS では特に問題ないはずである。今度大学で試してみるか。

さて、すっかり忘れていたが全角記号について考える。読点とカンマに関しては、まず、以前のエントリで決めたことを撤回し、読点を使うことにする。理由は、Web に置いておく文章が必ずしも化学系ではないから、カンマにこだわる必要はないと判断したからである。次に、感嘆符と疑問符は見た目に致命的な影響はないので、それぞれ「! (U+0021)」「? (U+003F)」を使うことにする。次は、小括弧だ。これはほんとうにどうしたらいいのだろう。半角では見た目があまりにも悪い。Wikipedia 日本語版でも同じようなことが議論されている。あれだ、保留。とりあえずこのエントリをアップしよう。結局、小括弧は いわゆる半角の U+0028, U+0029 でいくことにした。とはいえ、TeX では全角も使う。

そのまえに、英数字前後の半角スペースについては、無いと見にくい。そして、この手の調節は本来表示を担う UA がやるべき処理だ。しかし、現実にはそれが可能な UA は存在しないので、文章の意味も変わらないことだし、半角スペースは入れることにする。

とりあえずこれでだいたい書いたか? 今回は調べる時間に丸 2 日間かけた。われながらあほだ。普通に生きている限り考える必要ない問題なのに。

今回は調べたサイトが結構多いので、以下に参考文献としてサイトを一応記した。本当は規格書を見たかったけど、休日で大学に行かないから今は無し。いずれ見ると思う。

コメント - 2 件

2 件のコメントが寄せられています。

この記事につっこむ

toon
2007-02-11T18:18:58+09:00

勉強しろよ。量子化学。

b
2007-02-11T23:03:28+09:00

量子とは中間の時点でさよならしましたさ。
あんな暗号よりこういう事のほうがよっぽど理解できる。
今更だが、学科間違えたとせつに思う。
まあ、もう遅いが。

コメント投稿フォーム