[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[2]: Backspace 2bytes character



白藤です。
私の誤解でした。平に謝ります。

takayuki wrote
>渡辺@湘南工科大です。
>
>白藤さん、アドバイスありがとうございます。
>
>On Thu, 03 Aug 2000 15:34:18 +0900, Hideki Shirafuji wrote:
>> International.cpp と MainFrm.cpp で
>> BOOL IsDBCSLeadByte(BYTE) が使われていますが、これはUnicode(DBCS)の
>> 先頭バイトを調べるAPIでSJIS(MBCS)には対応していないように思うのですが?
>> 問題でていませんか?
>MSのいうDBCSとは16ビットのUnicodeと同一なのでしょうか?
>MSDNを読んでみると、
>・ANSI (single-byte character sets)
>・DBCS (double-byte character sets)
>・UNICODE
>という分類になっていて、
>"DBCS, sometimes reffered to as MBCS"とも書いてあるので、IsDBCSLeadByte
>でシフトJISを検査できると思っていました。
>それにこの関数はコードページに依存しているからUnicodeじゃないと思いま
>す。
>
>ところでWindowsのUnicodeのエンコーディングスキムは何なのでしょうか?
>そこら辺がよくわかっていないのですが、Unicodeだったらもっと簡単に判別
>できそうな気がするのですが。
>今から試してみます。
結果は全く同じですね。
下のソースで結果出したらおなじでした。
unsigned int i;
for (i = 0; i < 256; i++) {
	BOOL f1 = IsDBCSLeadByte((BYTE)i);
	BOOL f2 = (_ismbblead(i) != 0);

	if (f1 && f2) {
		printf("i = %d, 漢字1st BYTE\n", i);
	}
	if ((!f1) && f2) {
		printf("i = %d, 漢字1st BYTE, DBCS X\n", i);
	}
		if (f1 && (!f2)) {
		printf("i = %d, ASCII, DBCS O\n", i);
	} else {
		printf("i = %d, ASCII\n", i);
	}
}
# ずっと前に使ったときに狂ったのは、signed/unsigned で
# 自分のソースのバグだったのか...ばかです。



// Name : Hideki Shirafuji
//
// mailto:shirafuji@mail.com