漢字かどうかの判断


ゆみ  2008-10-28 10:21:04  No: 145363

入力された文字を文字コードで判断して、漢字以外のものが入力されているか判断したいと思っています。

方法はサイトで調べて判ったのですが、漢字かどうかの判断が判りません。

第一水準、第二水準以外のものが入力されていたら、漢字でないと判断して良いのでしょうか?
(一部記号が入ると思いますが、それは別で考慮しようと思います)

以上、よろしくお願いします。


YuO  2008-10-28 19:27:17  No: 145364

> 第一水準、第二水準
って何ですか。
ここはVB.NETの掲示板ですから,当然文字集合はUnicodeですよね。
# VB.NETがISO/IEC 101646-1を文字集合にしていたらごめんなさい。

漢字であるかは,正規表現
\p{IsCJKUnifiedIdeographs}|\p{IsCJKUnifiedIdeographsExtensionA}|\p{IsCJKCompatibilityIdeographs}
でほぼ調べられます。

この正規表現では,
CJK Unified Ideographs : http://www.unicode.org/charts/PDF/U4E00.pdf
CJK Unified Ideographs Extension A : http://www.unicode.org/charts/PDF/U3400.pdf
CJK Compatibility Ideographs : http://www.unicode.org/charts/PDF/UF900.pdf
が対象範囲になります。
CJK Unified Ideographs Extension B : http://www.unicode.org/charts/PDF/U20000.pdf
CJK Compatibility Ideographs Supplement : http://www.unicode.org/charts/PDF/U2F800.pdf
は対象になりません。


魔界の仮面弁士  2008-10-28 19:51:42  No: 145365

> 漢字かどうかの判断が判りません。

そもそも何故、漢字かどうかの判断が必要なのでしょうか?
それによって、記述すべき判断基準も異なってくるかと思います。

とくに、それらの文字データがどのように渡されるのかが争点になります。

String 型として渡されるのであれば、それらは Unicode にて処理されるため、
Shift_JIS の重複文字などは判断できないでしょう。
http://support.microsoft.com/kb/170559/ja

String ではなく、バイナリとしての入力(Byte配列やStream等)であるならば、
それらの文字コードが明らかにされねばなりません。

それから、漢字の部首を表す文字や、記号(特に、漢字を含むもの)はどうしますか?
  TextBox1.Font = New Font("MS ゴシック", 18)
  TextBox1.Text = ChrW(&H337F) & ChrW(&H336F) & ChrW(&H32AC) & ChrW(&H3240) & ChrW(&H3228) & ChrW(&H6C35)

その他、平仮名/片仮名/ハングル等はどうするのか。また、漢字ではあっても、
日本以外の文字(中国、香港、台湾、韓国、ベトナム)をどうするのかといった点も
詰めておかなければならないでしょうね。

で、とりあえずは Unicode と仮定して…。

Unicode のコードポイントを調べて、それが“CJK 統合漢字”の範囲
すなわち U+4E00〜U+9FFF のブロックにあれば、漢字と見做してよいでしょう。
日中韓の殆どの漢字は、この領域にあるハズです。

なお、調べる文字がサロゲートペアで無ければ、
  Dim S As String = AscW(文字).ToString("X4")
にて、4桁の16進数を得ることができます。

その他、該当しそうな範囲を下記などから探してみてください。
http://www.asahi-net.or.jp/~AX2S-KMTN/ref/unicode/e_asia.html

# ついでにネタとして、[漢字っぽくない文字]の例。
# 普段利用可能な文字では無いですし、今回の話とは関係無いですけれども。
http://www.sf.airnet.ne.jp/~ts/language/coelacanth.html


shazbot  2008-12-25 23:16:12  No: 145366

『漢字以外のもの』を網羅するのが一番近道なきがします。


shazbot  2008-12-25 23:17:35  No: 145367

ああ、すいません、日本語以外もはいるんですね^^;
上のアホな書き込みは忘れてください。。。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加