[前][次][番号順一覧][スレッド一覧]

sylpheed-jp:2480

From: KIMURA Osamu <kimura@xxxxxxxxxx>
Date: Fri, 3 Oct 2003 15:00:17 +0900
Subject: [sylpheed-jp:02480] Re: 差出人の日本語一部文字化けについて(Solaris9 04/03 on Sparc, Sylpheed0.9.6)

木村です.

# 横から失礼.

--- On Fri, 03 Oct 2003 13:06:34 +0900,
	Hiroyuki Yamamoto <hiro-y@xxxxxxxxxx> wrote:

> > 私も以前同じ現象に悩まされましたが、isspaceなどがlocaleに依存して動作
> > が変わってしまう??ことが原因のようです。
> > 「[sylpheed-jp:02146] Re: 件名の文字化け」にも書きましたが、次のやり方
> > で回避できました。
> > 
> > > 1. 適当な所に空っぽのctype.hを作る。(touch ctype.h)
> > > 2. 強制的に1をインクルードさせる。(make CC='gcc -include ctype.h')
> > 
> > あるいは、[sylpheed-jp:02148]で吉山さんが報告されたやり方もあるようで
> > す。
> > 
> > >   環境は違いますが、他でも問題になっていました。解決策として、使用前
> > >   に
> > > isspace を undef してしまうというのがあるようです。
> > > 
> > > http://sources.redhat.com/ml/cygwin/1998-09/msg00550.html
> 
> こういう問題があるので、マルチバイト文字を扱うところでは isspace() を
> 使わずに自前で処理したほうがいいんでしょうかねぇ。
> grep isspace src/*.c したらかなりの量が引っかかるので思案中^^;

本現象はマルチバイト文字を扱うかどうかとは直接の関係が無く,locale と
glibc (+ ctype.h) の関係だと思います.
私が出会ったのは (自作のアプリですが…),マルチバイト文字を扱っていない
のに isspace() が誤動作するというものでした.(なんと 0x20 が isspace()
で false になってしまった)
# ctype.h に定義されているマクロが悪いというよりも,glibc に埋め込まれ
# ている bit test テーブルがおかしいように見えた.glibc のバージョンに
# よっても違うかもしれません.

マクロ版の isspace() ではなくライブラリ関数版の isspace() では問題なく
動くようなので,isspace の undef というのは現実的な解だと思います.

或いは ctype.h のインクルードの際に

  #if defined(__GLIBC__)
  #define __NO_CTYPE
  #endif
  #include <ctype.h>

をするとか,locale の影響を受けないように見える isblank() に redefine
してしまうのもいいかもしれません.(isblank() は glibc の拡張みたいです
が…)


[前][次][番号順一覧][スレッド一覧]

      2476 2003-10-03 09:51 [swaka@xxxxxxxxxx    ] 差出人の日本語一部文字化けについて(Solaris9 04/03 on Sparc, Sylpheed0.9.6)
      2477 2003-10-03 10:04 ┗[Noriaki.Seki@xxxxxxx]                                       
      2478 2003-10-03 10:35  ┣[swaka@xxxxxxxxxx    ]                                     
      2479 2003-10-03 13:06  ┗[hiro-y@xxxxxxxxxx   ]                                     
->    2480 2003-10-03 15:00   ┗[kimura@xxxxxxxxxx   ]