UNICODEの漢字の判別

最近、文字列から漢字だけを抽出したいとか漢字の使用率を知りたいなどと言う無茶な話を耳にする。
「漢字」の定義すらよくわからないのに。
シフトJISであれば[亜(0x889F)-黑(0xEEEC)]の範囲とすれば済みそうだけどUNICODEはそう簡単にいかない。
UNICODEの歴史を知っている人ならわかると思うけど、CJKという形で漢字を半ば無理矢理詰め込み、その後でどんどん漢字を追加していったので漢字がひとかたまりになっていないから。どうしよう?
さしあたりウィキペディアの「CJK統合漢字」(2021年12月9日 (木) 14:08 UTC,URL https://ja.wikipedia.org/wiki/CJK%E7%B5%B1%E5%90%88%E6%BC%A2%E5%AD%97)のページ末尾に「UnicodeにおけるCJK漢字」という表があるのでこれを元にした判別をしてみた。
あくまで個人的な見解です。

■丸ごと漢字と見なして良さそうなブロック

ブロック範囲備考
CJK部首補助2E80-2EFF
康煕部首2F00-2FDF
CJKの筆画31C0-31EF漢字の筆画なので漢字とみなして良いと思う。
CJK統合漢字拡張A3400-4DBF
CJK統合漢字4E00-9FFFJISX0208系の漢字の大半はココ。
漢字とみなして良いと思う。
CJK互換漢字F900-FAFF
CJK統合漢字拡張B20000-2A6DFSIP(追加漢字面)なので漢字とみなして良いと思う。
CJK統合漢字拡張C2A700-2B738
CJK統合漢字拡張D2B740-2B81D
CJK統合漢字拡張E2B820-2CEA1
CJK統合漢字拡張F2CEB0-2EBE0
CJK互換漢字補助2F800-2FA1F
CJK統合漢字拡張G30000-3134ATIP(第三漢字面)なので漢字とみなして良いと思う。

■一部の文字は漢字

ブロック範囲備考
CJKの記号及び句読点3000-303F本領域に属している句読点などは漢字ではないと思うが、「漢数字の0(〇)」だけは漢字だと思う。
囲みCJK文字・月3200-32FF大半は「㈪」などの文字なので漢字ではないと思うが、「㋿」は漢字かもしれない。
CJK互換用文字3300-33FF大半は「㌀]などの文字なので漢字ではないと思うが、「㍻㍼㍽㍾㍿」は漢字かもしれない。

■漢字…なのかもしれない(漢字と言うには無理があるか?)

ブロック範囲備考
漢字構成記述文字2FF0-2FFFIDS。本文字の後ろに漢字が続くので漢字と見なしても良いかも知れない。
囲み漢字補助1F200-1F2FF「🈡」などのARIB文字。「㋿」などと同じと見なすならそれらは漢字なのかも。

■漢字では無い

ブロック範囲備考
CJK互換形FE30-FE4F縦書き用の括弧などの文字。漢字ではない。

他にも「漢文用記号」としてU+3190~319F(㆐~㆟)があるけど、それは読み順などを指示する記号なので漢字扱いにはしないことにする。


下記の表は日本の各仕様がUNICODEのどこかを調査してみた結果。
※2022年3月6日現在の情報に基づく。文字はgithubのこれを基にした。

CJK統合漢字CJK互換漢字CJK統合漢字拡張ACJK統合漢字拡張B
第一水準漢字
第二水準漢字
第三水準漢字
第四水準漢字
常用漢字
(異体字含めず)

※𠮟(U+20B9F)
のみ
人名用漢字

上記より「CJK統合漢字をはじめとする4つの領域の範囲であるか?」で、「日本でごく一般に使用される漢字」の最低限の判定は可能だと思う。
ちなみにCJK統合漢字拡張BはSIPに属していて、そのSIPは「追加漢字面」という「この面は漢字です」という場所なので、「CJK統合漢字拡張B」と限定せずにSIPの範囲(U+20000~2FFFD)でチェックした方が後々楽になるかも知れない。
※SIPにはCJK統合漢字拡張Bに加え、CJK統合漢字拡張C~F、CJK互換漢字補助も含まれるので

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA