トップ回答者
ASP.NETの文字コードについて

質問
-
たびたびお世話になっております。
ASP.NET 2.0でWEBサイトの文字コードはデフォルトで
utf8となっております。WEBで入力したデータをオラクルDBに
保管していますが、オラクルDBのデフォルト文字コードを
shift-jisにしてあります。「質問」
①この場合、もしかしたら、下記のケース(A,B)で文字化けが発生するのでしょうか?
→A:WEBからDBにインサートしたデータをWEB上表示した場合
→B:WEBからDBにインサートしたデータをSQLPLUSなどで選択して表示した場合
②asp.net+Oracleのシステムは多いと思いますが、皆様どうなさっていますか?
環境
Visual Studio 2005 ASP.NET 2.0
Oracle 11g
回答
-
今回のケースでは、utf-8にあってshiftjisにマッピングされていない文字については文字化けします。
これは、Oracle Databaseのテーブルに格納する時点で発生するので、取り出し側がどのようなツールであってもです。
このあたりは、全角チルダのようにマッピングが違うケースとは異なります。
システム全体の文字コードとしてはshiftjisという事でいいのでしょうか?
もし、そうであるならばASP.NET側でshiftjisにない文字をチェックしてそのような入力があった場合にはOracle Databaseに登録せずに再入力してもらうように画面を遷移させる必要があると思います。
システム全体の文字コード、もしくはWEBサイトの要件としてutf-8のサポートが謳われているのであれば、現在のOralce Databaseの定義は不適切なのでutf-8が扱えるように再構築が必要です。
参考URL:
http://blogs.wankuma.com/hatsune/archive/2007/07/18/85608.aspx
http://blogs.wankuma.com/hatsune/archive/2007/08/22/91435.aspx
http://blogs.wankuma.com/hatsune/archive/2007/09/08/94777.aspx
http://blogs.wankuma.com/hatsune/archive/2007/09/28/98454.aspx
http://blogs.wankuma.com/hatsune/- 回答としてマーク moonal 2009年3月16日 7:18
すべての返信
-
今回のケースでは、utf-8にあってshiftjisにマッピングされていない文字については文字化けします。
これは、Oracle Databaseのテーブルに格納する時点で発生するので、取り出し側がどのようなツールであってもです。
このあたりは、全角チルダのようにマッピングが違うケースとは異なります。
システム全体の文字コードとしてはshiftjisという事でいいのでしょうか?
もし、そうであるならばASP.NET側でshiftjisにない文字をチェックしてそのような入力があった場合にはOracle Databaseに登録せずに再入力してもらうように画面を遷移させる必要があると思います。
システム全体の文字コード、もしくはWEBサイトの要件としてutf-8のサポートが謳われているのであれば、現在のOralce Databaseの定義は不適切なのでutf-8が扱えるように再構築が必要です。
参考URL:
http://blogs.wankuma.com/hatsune/archive/2007/07/18/85608.aspx
http://blogs.wankuma.com/hatsune/archive/2007/08/22/91435.aspx
http://blogs.wankuma.com/hatsune/archive/2007/09/08/94777.aspx
http://blogs.wankuma.com/hatsune/archive/2007/09/28/98454.aspx
http://blogs.wankuma.com/hatsune/- 回答としてマーク moonal 2009年3月16日 7:18
-
Wolfgang_al の発言:
ということはDBの文字コードをutf8に変更する方法しかないと思いますが、
プロジェクトはテストフェーズに突入しており、いまからDBのキャラクタセットを変更するのが
若干リスクがあると思います。(現varchar2のバイトX3で済みますかね?)リスクではなく、すでに発現した問題ではないでしょうか。
初音玲さんのポストにあるとおり、UTF-8 → Shift_JIS 変換で、変換できない文字があります。「変換できない文字がある」というのは、問題ではないのでしょうか。
また、Oracle 対 Microsoft の場合、Wave-Dash など、一部の文字のマッピングがずれているという問題があります。詳細は忘れましたが、**TILDA とかいう文字セットに設定していないなら、「文字のマッピングがずれている」という問題があります。
適切に設定していれば、ADO.NET の内部で文字コードの変換をしてくれますので、通信上に Shift_JIS のコードが流れることはありません。したがって、変換不可能な文字が化けるということ以外は、問題はありません。
なお、少なくとも Oracle8 の頃から VARCHAR2 などの幅に「文字数」を指定できるので、文字数で指定しているなら、型を変えるだけで良いはずです。あと、UTF-8 は、最大4バイトあります。
う~ん。。。Windows XP と Vista が混在している環境だと、文字化けが発生しそう?→波ダッシュ link to Wikipedia
Jitta@わんくま同盟