none
ASP.NETの文字コードについて RRS feed

  • 質問

  • たびたびお世話になっております。

    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

    2009年3月16日 2:29

回答

すべての返信

  • 今回のケースでは、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
    2009年3月16日 2:54
  • 初音玲さん

    投稿ありがとうございます。大変参考になりました。

    要件としては、文字化けを防ぎたいだけです。
    しかし、WebでAJAXを使っているので、ajaxで非同期通信を行っている場合、
    utf8以外は正常に動作しないとの記事をみました。

    ということはDBの文字コードをutf8に変更する方法しかないと思いますが、
    プロジェクトはテストフェーズに突入しており、いまからDBのキャラクタセットを変更するのが
    若干リスクがあると思います。(現varchar2のバイトX3で済みますかね?)


    2009年3月16日 6:38
  • 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@わんくま同盟
    2009年3月17日 23:27