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カテゴリにすべての結合文字が含まれているか、
そして、結合文字以外の文字が一切含まれていないかについては、はっきりしていません。
特定のエンコーディングの
をチェックできる。