「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?クラスを利用する。
参考 †