Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連以外

漢字のようで漢字でないUnicodeの「康熙部首」と「CJK部首補助」

きっかけ

以下のツイートで「埼玉埼⽟問題」と康煕部首を知りました。

康煕部首とは

⼀⼁⼂⼃⼄⼅⼆⼇⼈⼉⼊⼋⼌⼍⼎⼏⼐⼑⼒⼓⼔⼕⼖⼗⼘⼙⼚⼛⼜⼝⼞⼟⼠⼡⼢⼣⼤⼥⼦⼧⼨⼩⼪⼫⼬⼭⼮⼯⼰⼱⼲⼳⼴⼵⼶⼷⼸⼹⼺⼻⼼⼽⼾⼿⽀⽁⽂⽃⽄⽅⽆⽇⽈⽉⽊⽋⽌⽍⽎⽏⽐⽑⽒⽓⽔⽕⽖⽗⽘⽙⽚⽛⽜⽝⽞⽟⽠⽡⽢⽣⽤⽥⽦⽧⽨⽩⽪⽫⽬⽭⽮⽯⽰⽱⽲⽳⽴⽵⽶⽷⽸⽹⽺⽻⽼⽽⽾⽿⾀⾁⾂⾃⾄⾅⾆⾇⾈⾉⾊⾋⾌⾍⾎⾏⾐⾑⾒⾓⾔⾕⾖⾗⾘⾙⾚⾛⾜⾝⾞⾟⾠⾡⾢⾣⾤⾥⾦⾧⾨⾩⾪⾫⾬⾭⾮⾯⾰⾱⾲⾳⾴⾵⾶⾷⾸⾹⾺⾻⾼⾽⾾⾿⿀⿁⿂⿃⿄⿅⿆⿇⿈⿉⿊⿋⿌⿍⿎⿏⿐⿑⿒⿓⿔⿕
KangXi Radicals | UTF-8 Iconsより

上の「康煕部首(こうきぶしゅ: Kangxi Radicals)」は部首を表すための特殊な文字なので、通常の文字として使うものではありません。しかし上のリストの前半はいかにも部首らしい文字ですが、後半になると普通の漢字と同じに見えてしまいます。

このような文字が通常の文字に混じってしまうと、検索できるはずの文字が検索できなくなったりソート順が期待どおりにならなくなったりといった不具合の原因になるので、避ける必要があります。

参考: 康煕部首 - Wikipedia

康煕部首の検出

康煕部首はU+2F00〜U+2FDFという比較的狭い範囲に収まっています。せっかくなので、私のオレオレRailsアプリである日本語エラーチェックサイトenno.jpにも[\u2F00-\u2FDF]の検出を追加しました。

これで、たとえば「埼玉埼⽟問題」という文字列をこのサイトでチェックすると康煕部首を検出できます。

CJK部首補助とは

先のツイートの続きでCJK部首補助を知りました。

⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌⺍⺎⺏⺐⺑⺒⺓⺔⺕⺖⺗⺘⺙⺚⺛⺜⺝⺞⺟⺠⺡⺢⺣⺤⺥⺦⺧⺨⺩⺪⺫⺬⺭⺮⺯⺰⺱⺲⺳⺴⺵⺶⺷⺸⺹⺺⺻⺼⺽⺾⺿⻀⻁⻂⻃⻄⻅⻆⻇⻈⻉⻊⻋⻌⻍⻎⻏⻐⻑⻒⻓⻔⻕⻖⻗⻘⻙⻚⻛⻜⻝⻞⻟⻠⻡⻢⻣⻤⻥⻦⻧⻨⻩⻪⻫⻬⻭⻮⻯⻰⻱⻲⻳
CJK Radicals Supplement | UTF-8 Iconsより

CJK部首補助(Radicals Supplement)も康煕部首と同様、通常の文字に混じってしまうと不具合の原因になります。

参考: CJK部首補助 - Wikipedia

CJK部首補助の検出

CJK部首補助もU+2E80〜U+2EFFという比較的狭い範囲に収まっていますので、こちらも私のオレオレRailsアプリである日本語エラーチェックサイトenno.jpにも[\u2E80-\u2EFF]の検出を追加しました。

おまけ: CJK統合漢字やCJK互換漢字にも部首はある

上述の康熙部首やCJK部首補助の文字は確実に部首なので、特殊な用途でない限り、原則として「通常の」日本語文からは一律に排除すべきと考えられます。

ただし、部首に相当する文字は康熙部首やCJK部首補助だけにあるわけではありません。部首に該当する文字は以下の「CJK統合漢字」や「CJK互換漢字」↓などにも含まれています。ややこしいですが、こちらの部首については通常の日本語文から一律に排除する必要はないだろうと推測しています。

参考: CJK統合漢字 (Unicodeのブロック) - Wikipedia
参考: CJK互換漢字 - Wikipedia


Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the United States and other countries.

参考記事


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。