[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
 ***********************************************************/