[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:10284] wchar_t (Re: I18N Document)
久保田です。
さっそく、教えてもらいたいことがあります。
C 言語のワイド文字列のテストのつもりで、このようなプログラムを作りました。
-------- wchar.c ---------
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
main()
{
char buf[1000];
wchar_t wbuf[1000];
int j, len;
setlocale(LC_ALL, "");
fgets(buf, 1000, stdin);
len = strlen(buf);
if (len > 0) buf[len-1] = 0; /* '\n' をとりのぞく */
printf("Original Text = \'%s\'\n", buf);
/* multi-byte string -> wide charcter string */
mbstowcs(wbuf, buf, 1000);
for(j=0; wbuf[j]; j++) {
len = wctomb(buf, wbuf[j]);
if (len>0) {
buf[len] = 0;
printf("%d .. len=%d \'%s\'\n", j, len, buf);
} else {
printf("%d .. len=%d\n", j, len);
}
}
return 0;
}
--------------------
(正常な)実行例 (LANG=ja_JP.ujis)
$ cc wchar.c -o wchar
$ ./wchar
abcあいう
Original Text = 'abcあいう'
0 .. len=1 'a'
1 .. len=1 'b'
2 .. len=1 'c'
3 .. len=2 'あ'
4 .. len=2 'い'
5 .. len=2 'う'
ここで、EUC-JP で 'あ' は 0xa4, 0xa2 ですので、ISO 8859-* とかでも
正常な文字として認識されるはずです。それをためしてみようとして、
$ LANG=fr ./wchar
とか、LANG をいろいろと変えてみましたが、どうしても
その部分で len=-1 (wctomb の異常終了) と出ます。私の予想では、
画面はこわれてもいいから、len=1 が 9 回出て来てほしいんですが。
(もちろん、コンソールとか xterm では画面は壊れないでほしいけど、
いまは Tera Term Pro なので)。
考えられる理由としては、
1. LANG に与える文字列が間違っている。
2. ISO 8859-* はサポートされていない。
3. インストールするパッケージが間違っている。
くらいが思い付きますが、LANG は fr とか it とか es とか
思い付くままにやってみましたがだめでした。
2. もありえそうにない気がするのですが。
関係しそうなパッケージは、
ii gcc 2.95.1-1 The GNU C compiler.
ii gconv-modules 2.1.2-0pre12 GNU C Library: Codeset conversion modules
ii libc6 2.1.2-0pre12 GNU C Library: Shared libraries and timezone
ii libc6-dev 2.1.2-0pre12 GNU C Library: Development libraries and hea
ii locale-ja 5 Locale definition files for Japanese.
ii locales 2.1.2-0pre12 GNU C Library: National Language (locale) da
です。
ちなみに、LANG=ja_JP.sjis としても、LANG=ja_JP.ujis としても、
EUC-JP の入力しか受け付けないようですね。glibc 2.1 が「いいかげん」
だというのはこのことでしょうか?
それではよろしくおねがいします。
/***********************************************************
* 久保田智広 Tomohiro KUBOTA
* tkubota@xxxxxxxxxxx / kubota@debian.or.jp
***********************************************************/