アプリ版:「スタンプのみでお礼する」機能のリリースについて

OS Windows XP
データベース ORACLE 10.0.2で開発中です。

データの中に、日本語・中国語・フランス語・韓国語が混在したデータがあります。
そのデータをブラウザで表示したいのですが、日本語は表示されますが、ほかは「?」となってしまいます。

・ORACLEデータベース作成時にキャラクタセットはAL32UTF8にしています。
・ASPで<%@ CODEPAGE=65001 %>を追加しています。
・参考にした文献は、pdfですが、
ftp://ftp.ashisuto.co.jp/pub/standard/vol74/oo4o …
です。

他に<meta http-equiv="Content-Type" content="text/html; charset=utf-8">を追加してみましたが、ダメでした。
ちなみに、データはaccessで、odbcでリンクをしたテーブルから入力し、Oracle Enterprise Managerで見ると、データは中国語・フランス語・韓国語もくずれていません。

ヒントでもいいので、教えてください。よろしくお願いします。

A 回答 (7件)

確認になりますが、その問題のASPのソースファイルもUTF-8で保存していますか?


秀丸やさくらエディタ、Viviなど、UTF-8に対応したエディタでASPファイルを開き、もし他の文字コードでASPファイルが保存されているようであれば、UTF-8でASPソースファイルを保存しなおして、再度問題のASPを実行してみてください。

それでも駄目なら、他の原因が考えられますので、またこのスレにご連絡ください。宜しくお願いします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/23 11:37

補足ありがとうございます。


後は、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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/23 14:01

>上記のように、追加して見ましたが、駄目でした。



ダメだったというのは、どのようにダメだったのでしょうか?
何か他のエラーが出たとか状況が変わらなかったなど・・・
また、教授したコードはしつこいようですが、UTF-8でソース保存されてますよね?

もし私が教授したコードがダメとなると、Oracle側のエンコード設定も
見なおした方がよさそうです。
恐らく、ASP側は、私が教授したコードで完全にUTF-8対応されているはずですので・・・

Oracle側のエンコード設定がどのようになっているか、データベース管理者に確認してみることをお勧めします。
また、ご自身がデータベース管理者であれば、ここではなく、Oracleやデーターベースのコーナーで質問すると何か返答がもらえるかもしれませんので、Oracle・データベースの質問カテゴリで質問して頂けると幸いです。

宜しくお願いします。
    • good
    • 0

それから、できれば、ASPからOracleに接続しに行く時、どのような接続方法で接続していますか?


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

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>
よろしくお願いします。

お礼日時:2008/06/23 15:33

ソースの送付ありがとうございました。


どうやら、Oracle側の問題だと断定しました。

下記のサイトにも同様の問題が掲載されています。
http://otn.oracle.co.jp/forum/thread.jspa?thread …

見てみると、中国語・日本語での混在時が問題のようです。
ちなみに文字が「?」になってしまうデータが格納されている
テーブル列は、Nから始まる型ですか?
例:)nvarchar, nchar など

もし、なっていないのであれば、テーブルの列定義を
varchar, char ではなく、nvarchar, nchar に変更してみてください。
更に、OracleデータベースのNLS_CHARACTERSETは、AL32UTF8のキャラセットではなく、「UTF8」で設定してみると解決するかもしれません。
http://shodai.hp.infoseek.co.jp/oracle_global/or …

ASPのスレなので、Oracleやデータベースのスレで質問するともっと良い答えがもらえるかもしれないので、そちらでも合わせて確認してみることをお勧めします。

参考URL:http://otn.oracle.co.jp/forum/thread.jspa?thread …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/24 17:01

一度、Oracleに保存されたデータをSELECTしてくるだけでは、


文字化けは解消しないと思います。

NLS_CHARACTERSETを変更&Nから始まる型(nvarchar, nchar)に変更したもので、UPDATEやINSERT文でデータを作成し、そのデータをSELECTしても、まだ文字化けしますか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/25 16:00

OracleインスタンスのキャラクタセットとNLS_LANGが等しい場合は、


文字コードの変換が行われないので、? が出ないとのことです。
一方、OracleインスタンスのキャラクタセットとNLS_LANGが異なる場合は、文字コードの変換が行われるため、組み合わせによっては、? が出てしまうみたいですね。

http://shodai.hp.infoseek.co.jp/oracle_global/or …
にある、「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/or …
を読んでみてください。

#また、既に、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?thread …
で掲載されていましたので、ひと通り細かく読んでみてもらっても宜しいでしょうか?

あまりお役に立てなくて申し訳ございませんが、もし上記でもまだ解決されない場合は、このASPスレではなく、Oracleのスレで再度質問してみると良いかもしれません。

あまりOracleは詳しくないので、お役に立てなくて申し訳ございませんでした。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/26 13:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!