「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。 目次 †概要 †文字チェックは、文字化け等を事前に防ぐために行われる。 以下の文字チェック・ルーチンが一般的である。 範囲チェック †エンコード後に、範囲チェックをする。 JIS第1第2水準漢字チェック †仕様: †JIS第1第2水準漢字をチェックする 実装: †シフトJISのコード範囲でチェックを行う必要があるので、 サンプルコード: †
//********************************************************************************** //* 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拡張文字は含まれない Unicodeの外字範囲チェック †仕様: †Unicodeの外字範囲をチェックする。
実装: †
サンプルコード: †(Unicode?JIS X 0221?各国の工業規格で使用されるか?) 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の外字でない。 } } 個別チェック †コード表で連続しない文字をチェックする。 JIS2004チェック †追加文字チェック †サロゲートペア文字チェック †
※ 前者は、存在チェックのみ、 ※ また、上記の方法では、結合文字はチェックできない。 結合文字チェック †
Lengthチェック †サロゲート ペア文字・結合文字は、
サロゲート ペア文字・結合文字を含む文字列の見た目の文字列長を調べる場合は、
/// <summary>文字列情報の表示</summary> /// <param name="strSurrogatesPair">文字列</param> private void GetStringInfo(string strSurrogatesPair) { // System.Globalization.StringInfoを使用する。 StringInfo si = new StringInfo(strSurrogatesPair); // 文字列を表示 MessageBox.Show(strSurrogatesPair); // 長さを表示1 MessageBox.Show("長さ(文字列長1):" + strSurrogatesPair.Length); // 長さを表示2 MessageBox.Show("長さ(文字列長2):" + si.LengthInTextElements); // 長さを表示3 MessageBox.Show("長さ(プログラム中(UTF-16)でのバイト長):" + Encoding.Unicode.GetBytes(strSurrogatesPair).Length); }
サンプルコード: †可逆チェック †エンコーディングを使用して可逆チェックをする。 特定のエンコーディングの
をチェックできる。 例:MS932の範囲内であるか?のチェック †
|