Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

システム内部で使用する文字コードとエンコーディングを考慮する。

  • .NET、Javaなどのプログラム中の文字列はUTF-16で扱われる。
  • 外部には既定でUTF-8でエンコーディングされた後に出力される。

考慮のための洗い出し例

文字コードとエンコーディング

考え方

  • 入出力時のエンコーディングの問題は、Unicode → Unicodeでエンコーディングしないのであれば、JIS 2004 固有の文字も問題なくデータ連携できる。
  • データ転送時のエンコーディングは、クライアント、プロトコル、ライブラリ、サーバなどの仕様や設定による。
  • データ転送時に、エンコーディングが発生するのなら、転送後のデータが文字化けしないか、事前にチェックする。
  • Windowsの外字(機種依存文字)などは、他の環境でエンコーディングされると文字化けが起きるので注意する。

文字コード

  • 従来のVB6.0などの標準GUIコントロールはUnicodeに対応しておらずShift-JISでの入力が一般的であったが、
    既にWWWブラウザやWindows Formsなど殆どのアプリケーションでUnicode対応がなされ、Unicodeでの入力が一般的になっている。
  • このため、システムで利用可能なキャラクタセットは、Unicodeで利用可能なキャラクタセットとすることが一般的である。

エンコーディング

文字コードが異なる「ファイル ⇔ システム」、「システム ⇔ システム」間では、エンコーディングが必要になる。

  • エンコーディングにより文字化けが発生するかどうかを「文字セット、文字エンコーディングの可逆変換性チェック」部品でチェックできる。
  • この機能は、エンコード ~ デコードの処理をすべて自システム内で実行する場合にのみ保障される。

キャラクタセット

  • 外字・機種依存文字を使用する際には注意する。通常、外部システムから入力された外字・機種依存文字は、システム保証外のとなる。
  • また、Vista / 2008でサポートされたJIS2004がサポートされない環境では、これらの文字を外字・機種依存文字と同様に扱う必要がある。
  • JIS X 0212(非漢字、補助漢字)、JIS X 0213(非漢字、第1~第4水準漢字)、JIS2004(JIS X 0213:2004)をサポートする場合は、以下考慮が必要である。

数値参照

  • WWWブラウザがUnicodeにのみ存在する文字を数値参照に自動変換する。
  • 数値参照で、文字は「&#xxxx;」というフォーマットの文字列で表現される。

WWWブラウザの自動変換

HTMLの文字コード指定がShift-JISになっている場合、HTTPのPOSTのエンコーディングがShift-JISになる。

この際、Shift-JISで表現できない文字は数値参照型 に変換される。

  • 鱓 → 鱓(JIS90補正漢字)
  • 𪚲 → 𪚲(JIS2004の最後の文字)

現状の開発技術(Java、.NET)では、これらの文字の、数値文字参照のサーバ側での自動デコードをサポートしていないので、
上記の「鱓」というデータが、数値文字参照のままの文字でサーバ側のプログラムに渡され、
さらに、サーバ側のプログラムがXSS対策でサニタイジングHTMLエンコーディングしてHTMLに出力するので、
2重エンコードで「鱓」という値で出力され、文字化けに繋がる。

例えば

「鱓」は、

  • POST時にWWWブラウザにより数値文字列参照(鱓)に変換される。
  • HTTPリクエスト エンティティ ボディでは「%26%2340415%3B」になる。
  • APサーバ HTTPリクエスト Formコレクションでは再び数値文字列参照(鱓)になる。

チェック

システム連携時、相互変換可能かをチェックする。

システム連携時、相互変換が可能かどうか、”Open棟梁”に付属する「コードページの可逆エンコード・チェック部品」を活用して確認する。

JIS X 0208(非漢字、第1、第2水準漢字)以外をチェックする。

相互変換が不可能な場合、”Open棟梁”に付属する「JIS X 0208-1983文字コード範囲チェック部品」を活用して入力チェックする。

JIS2004をチェックして除外する場合。

クライアント側でJIS2004表示が不可能な場合、”Open棟梁”に付属する「JIS2004チェック部品」を活用して入力チェックする。

システム内部でJIS2004を扱う場合。

4バイト文字が存在するため、文字列操作を行う際は必要に応じてStringInfo?クラスを利用する。

参考


添付ファイル: fileCharacterCodeAndEncoding.png 123件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-30 (月) 16:44:10 (137d)