en_US.UTF-8 環境だと0x27が全角幅になる件

どうもです。
どうも気になったので,そしてよき解決方法が思い浮かばないので,
エントリにしておきます。


Meadow内でshell-modeなどをLANG=en_US.UTF-8 で使用しています。
で,昨日*compilation*バッファにでたエラーが化け化けでばびったです。
ちなみにソースは全部アスキー文字です。


原因は,シングルクォテーションが,どうやら全角幅のものになっているから
(たぶん2バイト)なのが原因では?と。


ほいで,色々試そうとした。
(setenv "LANG" "C") にすると,大丈夫。
Cygwin を起動して(LANG は en_US.UTF-8),man ascii してみると,
0x27が予想通り,全角幅で表示されている。うーん,なんで?


meadow内からもman asciiして,対象の文字で,describe-char してみた結果は以下。
どうやら,0xb4 が使用されている様です。

  character: ´ (53421, #o150255, #xd0ad, U+00B4)
    charset: japanese-jisx0208 (JISX0208.1983/1990 Japanese Kanji: ISO-IR-87.)
 code point: #x21 #x2D
     syntax: _ 	which means: symbol
   category: j:Japanese |:While filling, we can break a line at this character.
 Properties: ascii: 39;
buffer code: #x92 #xA1 #xAD
  file code: #xC2 #xB4 (encoded by coding system mule-utf-8-unix)
    display: by this font (glyph code)
     MeiryoKeConConsolas-15 (#x814C)

[back]

さて,使用しているフォントは自作改造フォントなので,フォントの問題か?
と思って,Cygwinから,bash を起動してデフォルトのフォントのまま,
man ascii してみたけど,0x27が全角幅で出力されてる。

fontforge でフォントを覗いてみた。

  • 0x27 は問題なし。
  • 0xb4 を見てみると,acute accent というグリフらしい。


なんと! 幅が2048になっているではないか!


ほー。で,まじか!?と思い,Consolasを覗いてみると・・・。



あれ? 1126だ。どゆこと?


コピー元はConsolasだから,グリフ自体は同じだけど,
MeiryoKeConsolasでの横幅が2048だったということか?
で,MeiryoKeConsoleを覗いてみる。
そすると,ビンゴ。2048だ。たぶん,MSゴシックとかも,
日本語フォントでは,0xb4の幅を2048扱いするのだろうか?

どうしましょ。

LANG=C だと問題ないのにねぇ。なんでだろう。
せっかく手に入れたUTF-8環境を手放したくはない。
ほいで,どうやって解決しましょうか。
このままだとコンパイルエラーが化けるし。
今は,setenv していることで対処しているけど。
フォントの幅を1126にしちゃえばいけるんだろうけど。
仮に,0x27の幅を2048にすることが,慣例みたいなものだったら,
いじるのは良くない気もする。


それとも,英語圏の人が使っているフォント(例えばConsolas)では,
いわゆる半角幅なのだから,半角幅にするのがよろしいのか?


というか,問題は,なぜ,0x27 を使用するところで,0xb4 が使われているのか?
俺の設定のせいか? うーん・・・。どうしよう。
このままだと,フォント改造魂に火が付いてフォント自体をいじっちゃいそうだ。


そういえば,Webページでもシングルクォテーションが,
全角幅になっていることがるのを思い出した。


同じような現象で困っている人っています?