[[Open棟梁>https://github.com/OpenTouryoProject]] wiki -[[戻る>アプリケーション設計のポイント]] *目次 [#r10713d2] #contents *概要 [#f0cfe3d9] システム内部で使用する文字コードとエンコーディングを考慮する。 -.NET、Javaなどのプログラム中の文字列はUTF-16で扱われる。 -外部には既定でUTF-8でエンコーディングされた後に出力される。 #ref(CharacterCodeAndEncoding.png,left,nowrap,文字コードとエンコーディング) *考え方 [#b95eae6a] -入出力時のエンコーディングの問題は、Unicode → Unicodeでエンコーディングしないのであれば、JIS 2004 固有の文字も問題なくデータ連携できる。 -データ転送時のエンコーディングは、クライアント、プロトコル、ライブラリ、サーバなどの仕様や設定による。 -データ転送時に、エンコーディングが発生するのなら、転送後のデータが文字化けしないか、事前にチェックする。 -Windowsの外字(機種依存文字)などは、他の環境でエンコーディングされると文字化けが起きるので注意する。 **文字コード [#u3b4459c] -従来のVB6.0などの標準GUIコントロールはUnicodeに対応しておらずShift-JISでの入力が一般的であったが、~ 既にWWWブラウザやWindows Formsなど殆どのアプリケーションでUnicode対応がなされ、Unicodeでの入力が一般的になっている。 -このため、システムで利用可能なキャラクタセットは、Unicodeで利用可能なキャラクタセットとすることが一般的である。 -例外的にShift-JISのWebサイトも存在するが、WWWブラウザがUnicodeにのみ存在する文字を数値参照に~ 自動変換するという動きが問題となることがあるため、こちらもUnicodeが一般的である。 -- 例えば、「鱓」は、 ---POST時にWWWブラウザにより数値文字列参照(鱓)に変換される。 ---HTTPリクエスト エンティティ ボディでは「%26%2340415%3B」になる。 ---APサーバ HTTPリクエスト Formコレクションでは再び数値文字列参照(鱓)になる。 -JIS X 0212(1990)to Unicode補助漢字コード表~ http://charset.7jp.net/jis0212.html --0x9C53 → 40019 **エンコーディング [#x304d6b2] 文字コードが異なる「ファイル ⇔ システム」、「システム ⇔ システム」間では、エンコーディングが必要になる。 -エンコーディングにより文字化けが発生するかどうかを「文字セット、文字エンコーディングの可逆変換性チェック」部品でチェックできる。~ -この機能は、エンコード ~ デコードの処理をすべて自システム内で実行する場合にのみ保障される。 **キャラクタセット [#e594bafb] -外字・機種依存文字を使用する際には注意する。通常、外部システムから入力された外字・機種依存文字は、システム保証外のとなる。 -また、Vista / 2008でサポートされたJIS2004がサポートされない環境では、これらの文字を外字・機種依存文字と同様に扱う必要がある。 -JIS X 0212(非漢字、補助漢字)、JIS X 0213(非漢字、第1~第4水準漢字)、JIS2004(JIS X 0213:2004)をサポートする場合は、以下考慮が必要である。 ***システム連携時、相互変換可能かをチェックする。 [#o73fb22d] システム連携時、相互変換が可能かどうか、”Open棟梁”に付属する「コードページの可逆エンコード・チェック部品」を活用する。 ***JIS X 0208(非漢字、第1、第2水準漢字)以外をチェックする。 [#p2d46cec] 相互変換が不可能な場合、”Open棟梁”に付属する「JIS X 0208-1983文字コード範囲チェック部品」を活用する。 ***JIS2004をチェックして除外する場合。 [#t1e0be98] クライアント側でJIS2004表示が不可能な場合、”Open棟梁”に付属する「JIS2004チェック部品」を活用する。 ***システム内部でJIS2004を扱う場合。 [#e1539419] 4バイト文字が存在するため、文字列操作を行う際は必要に応じてStringInfoクラスを利用する。 *参考 [#p614e81b] -[[文字コード - マイクロソフト系技術情報 Wiki - 内部リンク>http://techinfoofmicrosofttech.osscons.jp/index.php?%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89#raa9651a]]