Open棟梁Project - マイクロソフト系技術情報 Wiki
文字チェックは、文字化けを事前に防ぐために行われる。
以下の文字チェック・ルーチンが一般的である。
//********************************************************************************** //* All Rights Reserved, Copyright (C) 2007,2012 Hitachi Solutions,Ltd. //********************************************************************************** //********************************************************************************** //* クラス名 :JISX0208_1983Checker //* クラス日本語名 :JIS X 0208-1983文字コード範囲チェック・クラス //* ・01~08区:記号、英数字、かな //* ・16~47区:JIS第1水準漢字 //* ・48~84区:JIS第2水準漢字 //* ※JIS X 0208-1990で追加された「凜[7425]」「熙[7426]」は含まれない //* ※NEC機種依存文字、NECのIBM拡張文字、IBM拡張文字は含まれない
string from = "文字列を初期化する。" StringBuilder to = new StringBuilder(); foreach (char c in from) { int charCode = (int)c; if (57344 <= charCode && charCode <= 63743) { // Unicodeの外字範囲 // BMP領域 U+E000‐U+F8FF (6,400字) } else if (983040 <= charCode && charCode <= 1048573) { // Unicodeの外字範囲 // 15面 U+F0000‐U+FFFFD (65,534字) } else if (1048576 <= charCode && charCode <= 1114109) { // Unicodeの外字範囲 // 16面 U+100000‐U+10FFFD (65,534字) } else { // Unicodeの外字でない。 } }
コード表で連続しない文字をチェックする。
//ここに判定する文字列を入れる。 string strSurrogatesPair = textBox1.Text; Regex rg = new Regex("^[^\uD800-\uDBFF\uDC00-\uDFFF]+$"); //サロゲート ペア文字が文字列中に含まれているか //Regex.IsMatch() メソッド判定 if ( rg.IsMatch( strSurrogatesPair ) ) { // サロゲートペア文字が含まれていない。 } else { // サロゲートペア文字が含まれている。 } // 結合文字はチェックできない。
ただし、Marksカテゴリにすべての結合文字が含まれているか、
そして、結合文字以外の文字が一切含まれていないかについては、はっきりしていません。
特定のエンコーディングの
をチェックできる。