文字診断
KanjiDiagnostics の Analyze で、一つの漢字表現について既存APIの情報を集約した KanjiDiagnosticResult を取得できます。
using KanjiVariants;
var result = KanjiDiagnostics.Analyze("高");
Console.WriteLine($"U+{result.BaseCodePoint:X}");
Console.WriteLine(result.IsJisX0208);
Console.WriteLine(result.EducationGrade);
foreach (var match in result.MjMatches)
Console.WriteLine($"{match.Entry.MjGlyphName}: {match.MatchKind}");
診断項目
| 分類 | プロパティと意味 |
|---|---|
| 元の表現 | Character。入力の漢字表現を保持 |
| Unicode | BaseCodePoint、IsBaseCharacterBmp、HasVariationSelector、VariationSelectorCodePoint |
| 表現の長さ | UnicodeScalarCountは通常1、IVS/SVSは2。Utf16CodeUnitCountはUTF-16コード単位数で、Character.ToString().Length相当 |
| JIS | IsJisX0208、IsJisX0212、IsJisX0213Plane1、IsJisX0213Plane2、両面の和集合を表すIsJisX0213 |
| 常用漢字 | IsJoyo、JoyoEntry。常用漢字表の本表字でなければfalse/null |
| 教育漢字 | IsEducationKanji、EducationGrade。配当表外ならfalse/null |
| 人名用漢字 | IsJinmeiyoKanjiは人名用漢字863字。IsNameUsableKanjiは常用漢字または人名用漢字 |
| 音訓配当 | ReadingEducation。小学校・中学校・高等学校ごとの音訓配当を既存APIの読み取り専用一覧で返す。本表字以外は空 |
| MJ情報 | MjMatches。元の表現に一致したMJ文字情報とFlagsによる一致理由を既存APIの読み取り専用一覧で返す |
BMP内の漢字はUTF-16で1単位、BMP外の漢字は2単位です。BMP内漢字とBMP外のVariation Selectorの組み合わせは3単位になります。IsBaseCharacterBmpは基底文字だけの範囲を示します。
IVS/SVSと入力制約
文字列は KanjiCharacter の Parse で厳密に解析します。nullは ArgumentNullException、空文字・複数の論理文字・不正UTF-16・漢字以外・未登録Variation Sequenceは FormatException です。解析済みの KanjiCharacter は再解析せず診断します。
登録済みIVS/SVSは受理しますが、JIS所属や常用・教育・人名用の判定で基底文字へ自動縮退しません。MJ検索も元のシーケンスを検索し、基底文字の一致を追加しません。
var ivs = KanjiDiagnostics.Analyze("辻\U000E0102");
Console.WriteLine(ivs.HasVariationSelector); // true
Console.WriteLine(ivs.IsJisX0208); // false
Console.WriteLine(ivs.UnicodeScalarCount); // 2
Console.WriteLine(ivs.Utf16CodeUnitCount); // 3
一般文字、名前全体の使用可否、送り仮名、表外読み、代替候補は診断しません。文字集合別の代替候補には Kanji.GetAlternatives を使ってください。