[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:05059] locale switching on glibc-wcsmbs
田中@東大工学部です。
libc6とwcsmbsのおかげで、X_LOCALEに頼らなくても、マルチバイト文字を扱
えるようになって大変便利になりました。感謝しております。
#そういえば、XFree86-3.3.2からのLinux-ix86-glibcのバイナリには、
#デフォルトで、X_LOCALEが含まれてませんね。
が、以下のようなコードを、
----------------------------------------
#include <X11/Xlocale.h>
#include <stdarg.h>
#ifdef X_LOCALE
#define mblen(a, b) _Xmblen((a), (b))
#endif
void title()
{
#ifndef X_LOCALE
printf ("[LIBC_LOCALE] ");
#else
printf ("[X_LOCALE] ");
#endif
printf ("[%s]\n", setlocale(LC_ALL, ""));
}
void check(char* str)
{
printf ("[%2d] %s\n", mblen(str, 4), str);
}
void chglocale(char* str)
{
printf ("locale %s\n", setlocale(LC_ALL, str));
}
void main ()
{
chglocale("ja_JP.ujis");
title();
check("漢字");
chglocale("fr_FR");
check("漢字");
chglocale("C");
check("漢字");
chglocale("ja_JP.ujis");
check("漢字");
}
----------------------------------------
gcc -g -o test_mblen_c test_mblen.c
と、コンパイルして、実行すると、
$ ./test_mblen_c
locale ja_JP.ujis
[LIBC_LOCALE] [ja_JP.ujis]
[ 2] 漢字
locale fr_FR
[-1] 漢字
locale C
[-1] 漢字
locale ja_JP.ujis
[-1] 漢字
となります。
つまり、始めにja_JPにしたあと、別のlocaleにきりかえると、再び
ja_JPに戻しても正しい動作をしてくれません。
通常こんな使い方はしないと思うのですが、gimp/gtkにこのようなコードがふ
くまれています。
これって、仕様なのでしょうか?
------------------------------------------------------------
田中伸哉(たなか・しんや)
shinya@xxxxxxxxxxxxxxxxxx