Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

文字チェックは、文字化け等を事前に防ぐために行われる。

以下の文字チェック・ルーチンが一般的である。

範囲チェック

エンコード後に、範囲チェックをする。

JIS第1第2水準漢字チェック

仕様:

JIS第1第2水準漢字をチェックする

実装:

シフトJISのコード範囲でチェックを行う必要があるので、
一文字づつシフト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の外字範囲をチェックする。

実装:

個別チェック

コード表で連続しない文字をチェックする。

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の範囲内であるか?のチェック

サンプルコード


Tags: :.NET開発, :文字コード, :国際化対応


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS