[[Open棟梁>https://github.com/OpenTouryoProject]] wiki
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>アプリケーション設計のポイント]]

*目次 [#r10713d2]
#contents

*概要 [#f0cfe3d9]
システム内部で使用する文字コードとエンコーディングを考慮する。

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

**考慮のための洗い出し例 [#fad9e510]
#ref(CharacterCodeAndEncoding.png,left,nowrap,文字コードとエンコーディング)

*考え方 [#b95eae6a]
-入出力時のエンコーディングの問題は、Unicode → Unicodeでエンコーディングしないのであれば、JIS 2004 固有の文字も問題なくデータ連携できる。

-データ転送時のエンコーディングは、クライアント、プロトコル、ライブラリ、サーバなどの仕様や設定による。

-データ転送時に、エンコーディングが発生するのなら、転送後のデータが文字化けしないか、事前にチェックする。
-データ転送時に、エンコーディングが発生するのなら、転送後のデータが文字化けしないか、事前に[[チェック>#g543725a]]する。

-Windowsの外字(機種依存文字)などは、他の環境でエンコーディングされると文字化けが起きるので注意する。

**文字コード [#u3b4459c]
-従来のVB6.0などの標準GUIコントロールはUnicodeに対応しておらずShift-JISでの入力が一般的であったが、~
既にWWWブラウザやWindows Formsなど殆どのアプリケーションでUnicode対応がなされ、Unicodeでの入力が一般的になっている。

-このため、システムで利用可能なキャラクタセットは、Unicodeで利用可能なキャラクタセットとすることが一般的である。

-例外的にShift-JISのWebサイトも存在するが、WWWブラウザがUnicodeにのみ存在する文字を数値参照に~
自動変換するという動きが問題となることがあるため、こちらもUnicodeが一般的である。
-例外的にShift-JISのWebサイトも存在するが、~
「[[WWWブラウザがUnicodeにのみ存在する文字を数値参照に自動変換する>#g543725a]]」~
という動きが問題となることがあるため、こちらも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棟梁”に付属する「コードページの可逆エンコード・チェック部品」を活用する。
*数値参照 [#c53f9fea]
-WWWブラウザがUnicodeにのみ存在する文字を数値参照に自動変換する。
-数値参照で、文字は「&#xxxx;」というフォーマットの文字列で表現される。

***JIS X 0208(非漢字、第1、第2水準漢字)以外をチェックする。 [#p2d46cec]
相互変換が不可能な場合、”Open棟梁”に付属する「JIS X 0208-1983文字コード範囲チェック部品」を活用する。
**WWWブラウザの自動変換 [#e6c8a6be]
HTMLの文字コード指定がShift-JISになっている場合、HTTPのPOSTのエンコーディングがShift-JISになる。

***JIS2004をチェックして除外する場合。 [#t1e0be98]
クライアント側でJIS2004表示が不可能な場合、”Open棟梁”に付属する「JIS2004チェック部品」を活用する。
この際、Shift-JISで表現できない文字は数値参照型 に変換される。

***システム内部でJIS2004を扱う場合。 [#e1539419]
-鱓 → 鱓(JIS90補正漢字)
-𪚲 → 𪚲(JIS2004の最後の文字)

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

**例えば [#q8c091e5]
「鱓」は、

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

*チェック [#g543725a]
**システム連携時、相互変換可能かをチェックする。 [#o73fb22d]
システム連携時、相互変換が可能かどうか、”Open棟梁”に付属する「[[コードページの可逆エンコード・チェック部品>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L313]]」を活用して確認する。

**JIS X 0208(非漢字、第1、第2水準漢字)以外をチェックする。 [#p2d46cec]
相互変換が不可能な場合、”Open棟梁”に付属する「[[JIS X 0208-1983文字コード範囲チェック部品>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Business/Str/JISX0208_1983Checker.cs]]」を活用して入力チェックする。

**JIS2004をチェックして除外する場合。 [#t1e0be98]
クライアント側でJIS2004表示が不可能な場合、”Open棟梁”に付属する「[[JIS2004チェック部品>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Str/JIS2k4Checker.cs]]」を活用して入力チェックする。

**システム内部で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]]

--[[JIS文字・漢字コード>http://techinfoofmicrosofttech.osscons.jp/index.php?JIS%E6%96%87%E5%AD%97%EF%BD%A5%E6%BC%A2%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89]]
---[[JIS2004関連>http://techinfoofmicrosofttech.osscons.jp/index.php?JIS2004%E9%96%A2%E9%80%A3]]
--[[エンコーディング>http://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0]]
--[[Windowsの外字>http://techinfoofmicrosofttech.osscons.jp/index.php?Windows%E3%81%AE%E5%A4%96%E5%AD%97]]
--[[文字のチェック方式>http://techinfoofmicrosofttech.osscons.jp/index.php?%E6%96%87%E5%AD%97%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E6%96%B9%E5%BC%8F]]
--[[アプリケーションのUnicode化>http://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AEUnicode%E5%8C%96]]


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