アカウント名:
パスワード:
この画面 [kde.gr.jp]を見ると、konsole って文字を全角/半角で管理してるんじゃなくて、完全にプロポーショナルなのかな、という印象を受けますが、どうなのでしょうか。ほとんどの文字は半角に見えますが、欠落文字を表現するらしき「□」は、半角より太く全角より細く見えます。
プロポーショナルなターミナルにおいては、「全角」文字はたんにたまたま通常の文字の倍の幅を持っているだけなのか、それとも論理的に2カラムを占有しているのか、ということが大きな違いになります。たとえば、全角文字を横切るようにカーソルを移動させる場合、カーソルは1カラム移動させればよいのか、2カラム移動させればよいのか、という違いが出てきます。ターミナルと、その上で走るアプリケーションとで、どちらの動作を行うかについて同意ができてなければ、誤動作が起こる可能性があります。
それから、その konsole の画面は UTF-8 なのでしょうか、それとも EUC-JP なのでしょうか。EUC-JP だったら話は早くて、JIS X 0208 (と JIS X 0212) は全角で、ASCII (と JIS X 0201) は半角で表示してくれ、ということで、全角/半角の判別は解決します。
UTF-8 における全角/半角をどうすればいいかは、わかりません。UTF-8 における動作は世界共通であるべきだ、という仕様をとるなら、上記画像に含まれる文字 (の少なくともほとんど) は半角であるべきです。たとえばロシア文字を全角で表示したらロシア人が怒りますから。
もし逆に UTF-8 における動作は世界共通ではないべきで、CJK においては文字幅に関する過去との互換性を維持する、という仕様をとるなら、CJK UTF-8 モードにおいては Unicode Standard Annex #11 East Asian Width [unicode.org] で「ambiguous」と定義されている文字をすべて全角扱いする、という実装をすることで、ほとんどの場合はうまくいきます。ところが一部、どうすべきか悩ましい文字があります。たとえばポンド記号 (U+00A3) は全角にすべきか半角にすべきか。JIS X 0208 における「£」は多くの環境で U+00A3 にマッピングされるため、「£」を全角で表示するには U+00A3 も全角でなければなりません。ところが、Unicode の側には、U+FFE1 FULLWIDTH POUND SIGN という文字があって、Windows のマッピングテーブルはこちらを使っています。わざわざ全角版を別に用意するくらいなんだから、という考えからすると、U+00A3 は半角であるべきです。さて、どっちをとるのがいいでしょうか。
ポンド記号以外にどんな文字が問題になるかは、こちら [debian.or.jp]をごらんください。
これは、「正統なマッピングテーブルは何か」という問題ともからむ、難問です。どう解決したらいいのか、もうわけがわかりません。
ちなみに、CJK 互換 UTF-8 モードを実装する場合以外にも、UTF-8 レンダリングエンジンにマッピングテーブルをかぶせることによって EUC-JP モードを実現するという実装をとる場合で、かつ、UTF-8 に変換してから全角/半角の判別を行うという実装をとる場合にも、この問題が存在します。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
全角/半角/プロポーショナル? (スコア:1)
この画面 [kde.gr.jp]を見ると、konsole って文字を全角/半角で管理してるんじゃなくて、完全にプロポーショナルなのかな、という印象を受けますが、どうなのでしょうか。ほとんどの文字は半角に見えますが、欠落文字を表現するらしき「□」は、半角より太く全角より細く見えます。
プロポーショナルなターミナルにおいては、「全角」文字はたんにたまたま通常の文字の倍の幅を持っているだけなのか、それとも論理的に2カラムを占有しているのか、ということが大きな違いになります。たとえば、全角文字を横切るようにカーソルを移動させる場合、カーソルは1カラム移動させればよいのか、2カラム移動させればよいのか、という違いが出てきます。ターミナルと、その上で走るアプリケーションとで、どちらの動作を行うかについて同意ができてなければ、誤動作が起こる可能性があります。
それから、その konsole の画面は UTF-8 なのでしょうか、それとも EUC-JP なのでしょうか。EUC-JP だったら話は早くて、JIS X 0208 (と JIS X 0212) は全角で、ASCII (と JIS X 0201) は半角で表示してくれ、ということで、全角/半角の判別は解決します。
UTF-8 における全角/半角をどうすればいいかは、わかりません。UTF-8 における動作は世界共通であるべきだ、という仕様をとるなら、上記画像に含まれる文字 (の少なくともほとんど) は半角であるべきです。たとえばロシア文字を全角で表示したらロシア人が怒りますから。
もし逆に UTF-8 における動作は世界共通ではないべきで、CJK においては文字幅に関する過去との互換性を維持する、という仕様をとるなら、CJK UTF-8 モードにおいては Unicode Standard Annex #11 East Asian Width [unicode.org] で「ambiguous」と定義されている文字をすべて全角扱いする、という実装をすることで、ほとんどの場合はうまくいきます。ところが一部、どうすべきか悩ましい文字があります。たとえばポンド記号 (U+00A3) は全角にすべきか半角にすべきか。JIS X 0208 における「£」は多くの環境で U+00A3 にマッピングされるため、「£」を全角で表示するには U+00A3 も全角でなければなりません。ところが、Unicode の側には、U+FFE1 FULLWIDTH POUND SIGN という文字があって、Windows のマッピングテーブルはこちらを使っています。わざわざ全角版を別に用意するくらいなんだから、という考えからすると、U+00A3 は半角であるべきです。さて、どっちをとるのがいいでしょうか。
ポンド記号以外にどんな文字が問題になるかは、こちら [debian.or.jp]をごらんください。
これは、「正統なマッピングテーブルは何か」という問題ともからむ、難問です。どう解決したらいいのか、もうわけがわかりません。
ちなみに、CJK 互換 UTF-8 モードを実装する場合以外にも、UTF-8 レンダリングエンジンにマッピングテーブルをかぶせることによって EUC-JP モードを実現するという実装をとる場合で、かつ、UTF-8 に変換してから全角/半角の判別を行うという実装をとる場合にも、この問題が存在します。
Re:全角/半角/プロポーショナル? (スコア:1)
あの画像がそう見えるのは欠落文字が大きいからというだけです。
(欠落文字がフォントによって変わるからめんどう…)
で、konsoleですが、ひょうじさせているのはEUC-JPのファイルですが内部的にはUnicodeです。
UTF-8ではなく、Qtの内部表現なので、UCS-2だったはずですが、
そのどちらかかっていうのは別に関係ないでしょう。
本来はこの問題はKDEだけではなく、Qtの日本語対応部分でのUnicodeとの変換テーブルとの
兼ね合いということになってくるはずです。
で、実装をどうするかは悩ましいところでしょうね。
内部で上記の文字がUnicodeのどの文字にマッピングされているかは確認していませんが、
それらがどうなっているかによるでしょう。
とはいえ、KDEは実装としては言語情報を持っていますし、
konsole自体が各言語毎に出力前に文字を割り当て直すコーディングが
実装されていたので、CJK用にカスタマイズは当然ありうると思います。
-- Che Che - Bye Bye