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で見ると、データは中国語・フランス語・韓国語もくずれていません。
ヒントでもいいので、教えてください。よろしくお願いします。
No.1
- 回答日時:
確認になりますが、その問題のASPのソースファイルもUTF-8で保存していますか?
秀丸やさくらエディタ、Viviなど、UTF-8に対応したエディタでASPファイルを開き、もし他の文字コードでASPファイルが保存されているようであれば、UTF-8でASPソースファイルを保存しなおして、再度問題のASPを実行してみてください。
それでも駄目なら、他の原因が考えられますので、またこのスレにご連絡ください。宜しくお願いします。
早速ありがとうございます。
OO4ODEMO.ASPの方は、
<head>
の下に、
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">を追加し、秀丸で、ファイル-エンコードの種類をUNICODE(UTF-8)にして、内容を維持したまま変換し、保存しております。
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>
No.3
- 回答日時:
>上記のように、追加して見ましたが、駄目でした。
ダメだったというのは、どのようにダメだったのでしょうか?
何か他のエラーが出たとか状況が変わらなかったなど・・・
また、教授したコードはしつこいようですが、UTF-8でソース保存されてますよね?
もし私が教授したコードがダメとなると、Oracle側のエンコード設定も
見なおした方がよさそうです。
恐らく、ASP側は、私が教授したコードで完全にUTF-8対応されているはずですので・・・
Oracle側のエンコード設定がどのようになっているか、データベース管理者に確認してみることをお勧めします。
また、ご自身がデータベース管理者であれば、ここではなく、Oracleやデーターベースのコーナーで質問すると何か返答がもらえるかもしれませんので、Oracle・データベースの質問カテゴリで質問して頂けると幸いです。
宜しくお願いします。
No.4
- 回答日時:
それから、できれば、ASPからOracleに接続しに行く時、どのような接続方法で接続していますか?
接続文字列またはASPで定義しているソースの一部公開して頂ければ、何かわかるかもしれません。
oo4o の接続方法だとUTF-8は問題があるようなことが掲載されていたのを見つけたので気になった次第です。
宜しくお願いします。
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>
よろしくお願いします。
No.5
- 回答日時:
ソースの送付ありがとうございました。
どうやら、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 …
kero_mioさま、いつも迅速な回答ありがとうございます。
1.データベースのデータ型をNVARCHAR2
2.新たにデータベースをNLS_CHARACTERSETをUTF8に設定し、データベースのデータ型をNVARCHAR2に設定
上記、2通りを試みてみましたが、表示は前回と同じ「?」でした。
ちなみにaccessでADO(Provider=OraOLEDB.Oracle)で接続した場合は、フォームに表示されてきます。
ASPの書き方には、問題ないようなので、他に原因があるのですね。
本当にいつも丁寧な回答ありがとうございます。
No.6
- 回答日時:
一度、Oracleに保存されたデータをSELECTしてくるだけでは、
文字化けは解消しないと思います。
NLS_CHARACTERSETを変更&Nから始まる型(nvarchar, nchar)に変更したもので、UPDATEやINSERT文でデータを作成し、そのデータをSELECTしても、まだ文字化けしますか?
いつも、ありがとうございます。
NLS_CHARACTERSETの変更(UTF-8)は、既存のデータベースを修正せずに、新規にデータベース、ユーザー、テーブル(データ型はnvarchar2)を作成し、ACCESSでADO(Provider=OraOLEDB.Oracle)で接続し、INSERT文でデータを作成しております。
そのデータをORACLE Enterprise Managerで、データ表示をすると、中国語等で表示されていますが、ASPで表示すると、「?」となります。
No.7ベストアンサー
- 回答日時:
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は詳しくないので、お役に立てなくて申し訳ございませんでした。
OSの環境変数にNLS_LANGの設定をしたら、表示されてきました!
本当にありがとうございます。
sql*plusの方は、文字化けしていますが、とりあえずデータ確認の方は、Oracle Enterprise managerの方で出来ますので、こちらの方は後で確認いたします。
いつも、迅速で適切な回答をありがとうございました。
最後に、Oracleのバージョンは10.2.0でした。間違えて入力しておりました。申し訳ございませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 〈場所を示す「に」と「で」〉 という誤り 36 2022/11/12 15:04
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- 韓国語 日本語の不備について 音が無い言葉を追加するべきじゃないでしょうか? 例えば「あ"」です この音は日 3 2023/04/25 08:20
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Windows 10 Windows10でアカウントの調子が悪いので、userを新規作成してそこへデータを引き継ぎたい 1 2023/02/16 00:46
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(社会科学) 世界で偉い順で言うと アメリカとフランスとイタリア → ドイツ → 日本 → 韓国と中国 スペイン 9 2023/07/11 14:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
Javaで家計簿を作成
-
卒業制作でてんてこまいです…
-
知識がなくても作成可能な「ソ...
-
formで送信したPOSTデータの削...
-
納品 vs ご納品 どちらが正し...
-
texに関する初歩的な質問
-
グーグルの障害者訓練プログラ...
-
購入手続き後の値上げ
-
見積だけで契約成立?
-
インプットとアウトプット
-
三菱製PLC:ファイルレジスタ(...
-
営業職をやってます。先月発注...
-
Zと2とか紛らわしいのがあるか...
-
スーパー発注し始めて3週間たち...
-
「スポット受注」はどういう意...
-
VPNについて
-
敬語チェックお願いします!
-
Visual Studioのプロジェクトの...
-
三菱シーケンサーA1SHCPUとA1SJ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
formで送信したPOSTデータの削...
-
長さ0の文字列を格納できません...
-
Javaで家計簿を作成
-
住所から市町村JISコードを検出
-
ASP 多言語の表示がうまく出来...
-
Q&Aの掲示板を作成していてヤフ...
-
電子納品
-
Access97データベースの最大登...
-
エクセルでSQLを使う
-
エクセル、VBAで検索するとデー...
-
accessとSQLserverの違い
-
パソコン 言語について 競馬...
-
CGI(Perl)を使用してGoogleスプ...
-
マスタメンテ系の仕事とは?
-
マスタデータの要件定義
-
知識がなくても作成可能な「ソ...
-
PHP 更新順を作成日順に変更し...
-
納品 vs ご納品 どちらが正し...
-
「スポット受注」はどういう意...
-
納入日と納品日について
おすすめ情報