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ページでもシングルクォテーションが,
全角幅になっていることがるのを思い出した。
同じような現象で困っている人っています?