@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

漢字コードの判定について

1
投稿者投稿内容
トシ
会議室デビュー日: 2003/03/11
投稿数: 2
投稿日時: 2003-03-11 15:47
今回初めて投稿させていただきました。
C#で、Windowsのアプリの開発を行っています。

漢字コードの判断で、その漢字が第1水準・第2水準
か(又は外字)判断する方法がわかりません。

方法をご存知の方がいらっしゃいましたら、教えて下さい。

よろしくお願いいたします。

みみ
会議室デビュー日: 2003/03/13
投稿数: 2
投稿日時: 2003-03-20 12:50
すでに解決しているかもしれませんが、ちょっと考えてみました。
JIS第一水準は 0x889F 〜 0x9872、JIS第二水準は 0x989F 〜 0xFC4B となります。
そこで、調べたい文字をバイト配列にエンコードして、第一水準・第二水準のJISコードの範囲にあるか
判定するというのはいかがでしょうか。

以下のコードで試したところ、ちゃんと判定できているようです。
(16進コードの判定に改良の余地があると思います)

コード:
using System.Text;

private void Method1()
{
    string st = "調べたい文字列";

    Encoding sjis = Encoding.GetEncoding("shift-jis");
    for(int i = 0; i < st.Length; i++)
    {
        // バイト配列にエンコーディング
	byte[] bstr = sjis.GetBytes(st.Substring(i, 1));

	// 第一水準の判定
	if(bstr[0] >= 0x88 && bstr[0] < 0x98)
	{
  	    System.Diagnostics.Debug.WriteLine("第一水準");
	    continue;
	}
	else if(bstr[0] == 0x98 && bstr[1] <= 0x72)
	{
            System.Diagnostics.Debug.WriteLine("第一水準");
            continue;
        }

	// 第二水準の判定
	if(bstr[0] >= 0x98 && bstr[0] < 0xFC)
	{
	    System.Diagnostics.Debug.WriteLine("第二水準");
	    continue;
	}
	else if(bstr[0] == 0xFC && bstr[1] <= 0x4B)
	{
            System.Diagnostics.Debug.WriteLine("第二水準");
	    continue;
	}
    }
}

みみ
会議室デビュー日: 2003/03/13
投稿数: 2
投稿日時: 2003-03-20 13:08
自己レスです。

第二水準の範囲を 0x989F 〜 0xFC4B と書きましたが、この中には
漢字以外の文字(ローマ数字や(株)など)も含まれてしまいます。
これらの文字を除外して判定しないといけないですね。
トシ
会議室デビュー日: 2003/03/11
投稿数: 2
投稿日時: 2003-03-20 13:58
”みみ”さんありがとうございました。

分からなくて、あきらめかけていましたが、早速ためした所
できました。

後ほどご指摘いただきましたローマ数字の部分も完璧です。

とても、分かりやすいご返答を頂き、大変たすかりました。

1

スキルアップ/キャリアアップ(JOB@IT)