ASPで多言語の表示がうまくできない!キャラクタセットの設定をチェックしよう

このQ&Aのポイント
  • ASPで開発中のウェブサイトで、日本語以外の言語の表示が「?」となってしまう問題に遭遇しました。
  • ORACLEデータベースのキャラクタセットをAL32UTF8に設定しているにもかかわらず、日本語以外が正しく表示されない現象が発生しています。
  • 他の言語も正しく表示するために、ASPコードにCODEPAGEを設定したり、Content-Typeを設定してみたりしましたが、解決できませんでした。ヒントやアドバイスをいただけると助かります。
回答を見る
  • ベストアンサー

ASP 多言語の表示がうまく出来ません

OS Windows XP データベース ORACLE 10.0.2で開発中です。 データの中に、日本語・中国語・フランス語・韓国語が混在したデータがあります。 そのデータをブラウザで表示したいのですが、日本語は表示されますが、ほかは「?」となってしまいます。 ・ORACLEデータベース作成時にキャラクタセットはAL32UTF8にしています。 ・ASPで<%@ CODEPAGE=65001 %>を追加しています。 ・参考にした文献は、pdfですが、 ftp://ftp.ashisuto.co.jp/pub/standard/vol74/oo4oasp.pdf です。 他に<meta http-equiv="Content-Type" content="text/html; charset=utf-8">を追加してみましたが、ダメでした。 ちなみに、データはaccessで、odbcでリンクをしたテーブルから入力し、Oracle Enterprise Managerで見ると、データは中国語・フランス語・韓国語もくずれていません。 ヒントでもいいので、教えてください。よろしくお願いします。

  • JJ-TO
  • お礼率95% (19/20)

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.7

OracleインスタンスのキャラクタセットとNLS_LANGが等しい場合は、 文字コードの変換が行われないので、? が出ないとのことです。 一方、OracleインスタンスのキャラクタセットとNLS_LANGが異なる場合は、文字コードの変換が行われるため、組み合わせによっては、? が出てしまうみたいですね。 http://shodai.hp.infoseek.co.jp/oracle_global/oracle_global.html にある、「NLS_LANG とキャラクタセットの関係」の箇所を見てみてください。 なので、そういった意味で考えると、当初の「AL32UTF8」の設定は望ましいと言えると思います。 また関係ないかもしれませんが、WindowsとOracleで、Unicode変換を行う際、変換方法が異なると、文字化けや?が発生する恐れがあるみたいです。 これは試してみないとわからないのですが、 ・Oracleインスタンスのキャラセットは、AL32UTF8にする ・Oracleにアクセスするクライアント(今回だとWebサーバー) 上で、ファイル名を指定して実行で「regedit」を実行し、  レジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\NLS_LANG」  を「JAPANESE_JAPAN.AL32UTF8」に変更してみるか、  もしくは、OSの環境変数にNLS_LANGの設定ができると思うので、  そちらで、JAPANESE_JAPAN.AL32UTF8 を設定してみる。 これでどうでしょうか? #Windows版 Oracle10.20 では、この設定が可能みたいなのですが、  10.0.2だと、ダメな可能性あり。  その場合は、65001 のCodePageを設定する必要があるかもしれません。詳細は、 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19218-02/ch3globenv.htm#sthref184 を読んでみてください。 #また、既に、Oracleインスタンスは、AL32UTF8で作成しているのは間違いないですよね?そうなると後は、Oracleクライアント(今回のケースだとWebサーバー)のNLS_LANGをAL32UTF8にするわけですが、問題点としては、ASPアプリでは文字化けしなくなっても、今度はWebサーバー上でもし、SQL*Plusなどのクライアントツールをインストールしていて、Webサーバー上でSQL*Plusを使うことがある場合は、今度は、SQL*Plusが文字化けする可能性があります。 (SQL*Plusは、UTF8対応されていない模様。SQL*Plusが?が表示されるみたいです。) なので、もしかすると、UTF8に対応したOracle接続&操作ツールを別途用意しなきゃいけない等の弊害はあります。 詳しいことは、 http://otn.oracle.co.jp/forum/thread.jspa?threadID=35001863&tstart=540 で掲載されていましたので、ひと通り細かく読んでみてもらっても宜しいでしょうか? あまりお役に立てなくて申し訳ございませんが、もし上記でもまだ解決されない場合は、このASPスレではなく、Oracleのスレで再度質問してみると良いかもしれません。 あまりOracleは詳しくないので、お役に立てなくて申し訳ございませんでした。

JJ-TO
質問者

お礼

OSの環境変数にNLS_LANGの設定をしたら、表示されてきました! 本当にありがとうございます。 sql*plusの方は、文字化けしていますが、とりあえずデータ確認の方は、Oracle Enterprise managerの方で出来ますので、こちらの方は後で確認いたします。 いつも、迅速で適切な回答をありがとうございました。 最後に、Oracleのバージョンは10.2.0でした。間違えて入力しておりました。申し訳ございませんでした。

その他の回答 (6)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.6

一度、Oracleに保存されたデータをSELECTしてくるだけでは、 文字化けは解消しないと思います。 NLS_CHARACTERSETを変更&Nから始まる型(nvarchar, nchar)に変更したもので、UPDATEやINSERT文でデータを作成し、そのデータをSELECTしても、まだ文字化けしますか?

JJ-TO
質問者

お礼

いつも、ありがとうございます。 NLS_CHARACTERSETの変更(UTF-8)は、既存のデータベースを修正せずに、新規にデータベース、ユーザー、テーブル(データ型はnvarchar2)を作成し、ACCESSでADO(Provider=OraOLEDB.Oracle)で接続し、INSERT文でデータを作成しております。 そのデータをORACLE Enterprise Managerで、データ表示をすると、中国語等で表示されていますが、ASPで表示すると、「?」となります。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.5

ソースの送付ありがとうございました。 どうやら、Oracle側の問題だと断定しました。 下記のサイトにも同様の問題が掲載されています。 http://otn.oracle.co.jp/forum/thread.jspa?threadID=3004133 見てみると、中国語・日本語での混在時が問題のようです。 ちなみに文字が「?」になってしまうデータが格納されている テーブル列は、Nから始まる型ですか? 例:)nvarchar, nchar など もし、なっていないのであれば、テーブルの列定義を varchar, char ではなく、nvarchar, nchar に変更してみてください。 更に、OracleデータベースのNLS_CHARACTERSETは、AL32UTF8のキャラセットではなく、「UTF8」で設定してみると解決するかもしれません。 http://shodai.hp.infoseek.co.jp/oracle_global/oracle_global.html ASPのスレなので、Oracleやデータベースのスレで質問するともっと良い答えがもらえるかもしれないので、そちらでも合わせて確認してみることをお勧めします。

参考URL:
http://otn.oracle.co.jp/forum/thread.jspa?threadID=3004133
JJ-TO
質問者

お礼

kero_mioさま、いつも迅速な回答ありがとうございます。 1.データベースのデータ型をNVARCHAR2 2.新たにデータベースをNLS_CHARACTERSETをUTF8に設定し、データベースのデータ型をNVARCHAR2に設定 上記、2通りを試みてみましたが、表示は前回と同じ「?」でした。 ちなみにaccessでADO(Provider=OraOLEDB.Oracle)で接続した場合は、フォームに表示されてきます。 ASPの書き方には、問題ないようなので、他に原因があるのですね。 本当にいつも丁寧な回答ありがとうございます。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.4

それから、できれば、ASPからOracleに接続しに行く時、どのような接続方法で接続していますか? 接続文字列またはASPで定義しているソースの一部公開して頂ければ、何かわかるかもしれません。 oo4o の接続方法だとUTF-8は問題があるようなことが掲載されていたのを見つけたので気になった次第です。 宜しくお願いします。

JJ-TO
質問者

お礼

Global.asaとOO4ODEMO.aspでやっていましたが、もっと単純に以下のようにしました。 --test.asp-- <% @language=VBScript codepage=65001 %> <% Response.ContentType = "text/html" Response.Charset= "utf-8" Session.CodePage=65001 %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <% Private OraSession Private oraDB Private OraDynaset Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDB = OraSession.DbOpenDatabase("test", "test_user/test", clng(&H3)) Set OraDynaset = oraDB.DbCreateDynaset("SELECT * FROM testtable", CLng(&H4)) Do Until OraDynaset.EOF = True Response.Write OraDynaset("naiyo").value & "<br>" OraDynaset.MoveNext Loop OraDynaset.Close %> </body> </html> よろしくお願いします。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

>上記のように、追加して見ましたが、駄目でした。 ダメだったというのは、どのようにダメだったのでしょうか? 何か他のエラーが出たとか状況が変わらなかったなど・・・ また、教授したコードはしつこいようですが、UTF-8でソース保存されてますよね? もし私が教授したコードがダメとなると、Oracle側のエンコード設定も 見なおした方がよさそうです。 恐らく、ASP側は、私が教授したコードで完全にUTF-8対応されているはずですので・・・ Oracle側のエンコード設定がどのようになっているか、データベース管理者に確認してみることをお勧めします。 また、ご自身がデータベース管理者であれば、ここではなく、Oracleやデーターベースのコーナーで質問すると何か返答がもらえるかもしれませんので、Oracle・データベースの質問カテゴリで質問して頂けると幸いです。 宜しくお願いします。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

補足ありがとうございます。 後は、ASP側の設定ぽいですね。 <%@ CODEPAGE=65001 %> もしかしたら下記が必要かもしれません。 試して頂いても宜しいですか? <% @language=VBScript codepage=65001 %> <% Response.ContentType = "text/html" Response.Charset= "utf-8" ' Oracle のデータをSessionに格納しているのであれば! Session.CodePage=65001 %> <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> </head> <body> ..... </body> </html>

JJ-TO
質問者

お礼

ありがとうございます。 上記のように、追加して見ましたが、駄目でした。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

確認になりますが、その問題のASPのソースファイルもUTF-8で保存していますか? 秀丸やさくらエディタ、Viviなど、UTF-8に対応したエディタでASPファイルを開き、もし他の文字コードでASPファイルが保存されているようであれば、UTF-8でASPソースファイルを保存しなおして、再度問題のASPを実行してみてください。 それでも駄目なら、他の原因が考えられますので、またこのスレにご連絡ください。宜しくお願いします。

JJ-TO
質問者

お礼

早速ありがとうございます。 OO4ODEMO.ASPの方は、 <head> の下に、 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">を追加し、秀丸で、ファイル-エンコードの種類をUNICODE(UTF-8)にして、内容を維持したまま変換し、保存しております。

関連するQ&A

  • 第二言語で

    今日入学式でついに外国語学部の大学生になれました!! 主要言語は英語にします。もう一つ言葉を選ぶのですが、 フランス語、インドネシア語、中国語、スペイン語、韓国語から選べます。 どれにするか本当に悩んで決められません…。どの言葉が一番習得しやすいのでしょうか?? 憧れの言葉はフランス語ですが、かなり難しいと聞きました…。 将来外国の方と関わる仕事がしたいので、アメリカでもたくさんの地域で使われている、スペイン語もいいなとおもいます…。 文法的には日本語と同じの韓国語は簡単と聞き惹かれますが、使える国が韓国、朝鮮と限られているので悩みます…。 どの言葉を選べばいいでしょうか?

  • ズバリどの言語が一番楽に習得できるでしょうか?

    (ドイツ語)、(フランス語)、(中国語)、(韓国・朝鮮語)で悩んでいます。 どの言語が単純に一番楽でしょうか?? 全然分らないので教えてください!!! みなさんお願いします~☆

  • これをいろいろな言語に翻訳してください

    ≪あなたの手は大切な人を守るものだから≫ 英語、中国語、韓国語、イタリア語、フランス語、リトアニア語 これに翻訳というか、なるべくかっこいい訳をお願いします! 英語ならなんとなくのはあります。

  • 大学の講義でどの言語を選べばいいのか悩んでいます・・・

    大学の講義で第二言語の選択をしなければなりません。 中国語、韓国語、フランス語、スペイン語、ドイツ語 今のところ中国語にしようと思っているのですが・・ 中国語の中でも、「口頭中国語」と「中国語」から選ばないといけません。どちらがいいんでしょう・・ 読めるのが先か、話すのが先か・・・

  • Excel でヨーロッパ系言語の表示をしたい

    インターネットデータベースからヨーロッパ系統言語(フランス語やドイツ語)で作成されたデータをダウンロードして、Excel で利用していますが、ウムラウトなどの表示がハングル文字の様な表示になってしまいます。OFFICE-2003 言語設定ツールでドイツ語フランス語を設定してパソコンを再起動しましたが、だめです。どなたか良い解決方法をご存じでしたら教えてください。

  • 日本語のcharsetはutf-8,shift_j

    日本語のcharsetはutf-8,shift_jisなどですが アメリカ、中国、韓国、フランスのcharsetは何を使っているんでしょうか? プログラミング

  • 形容詞ってどの言語も多いのでしょうか?

    日本でも、英語以外にドイツ語フランス語スペイン語中国語朝鮮韓国語とかいろいろありますけど。 日本語の形容詞は少ないといわれますけど、ほかは多いのでしょうか?

  • 一番簡単な言語の検定試験はどれですか?

    大学の資格による単位免除を狙っています。 韓国語、中国語、スペイン語、フランス語、ドイツ語の 中で、検定試験が一番簡単なのはどれですか? 実際に使いこなせるかはべつとしてお願いします。

  • 多言語が扱えるテキストエディタを探しています

     多言語(中国語と韓国語、日本語)が扱えるテキストエディタで、フリーウェアを探しています。  TeraPadはUTF-8対応でもこれら外国語はだめで、EmEditor FreeはUTF-8対応で外国語にも対応とあり少し使ってみたのですが、例えば韓国語は韓国語の文字コードで保存しないとだめなようでした。  ネットサーフィンしてMeadowというソフトにたどり着いたのですが、Windowsユーザーにはなんともいえない独特の使い勝手に(?)、直感的に使いにくいという点であきらめました。  多言語と言っても、(おそらく)一枚のファイルに二つの言語を同時表記させるような使用までは想定しておりません。つまりMeadowのように、複数の言語を同時に扱うまでの機能は求めておりません。  また、上記日中韓が扱えるなら、ユーザーインターフェースは英語でもかまいません。  もし使いやすい多言語対応のテキストエディターがあれば、ご紹介頂ければ幸いです。 使用OS:WindowsXP Home 蛇足 :私は韓国語、中国語は理解できません(苦笑。

  • マイナーな第三言語を探しています。

    今現在英語圏で留学中の大学生です。留学中とはいえ英語力はまだまだで、英語しゃべれる人なんかくさるほどおるやん、とものすごく思っています。ひとつなにかみんながあまり知らないような言語も学びたいと思っているのですが、フランス語やスペイン語ドイツ語中国語韓国語などのメジャーな言語以外で、でも話せるとどこかで重宝されるような言語をお知りの方いらっしゃいませんでしょうか。独学になると思うので、あわよくば韓国語スペイン語のようにどちらかというとリスニングがしやすいような言語があればいいなと思っています。魅力的な言語をお知りの方、よろしくお願いします。