掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
UTF8のデータをASPに表示 (ID:139688)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、ASP のソースファイルは、UTF-8 で保存していますか? また、それは BOM を含んでいますか? それとも含んでいませんか? # IIS のバージョンによって、この BOM の扱いが違うようなので。 あとは、Session.CodePage がどうなっているのか、とか。 > 例)テーブルの値(地方:E59CB0-E696B9)が、ASPでは(蝨ー譁:E59C-B0-E696) 本来であれば、ASP 自体が UTF-8 であろうとなかろうと、 S = RS.Fields("foo").Value の結果は、"地方" すなわち "ChrW(&H5730) & ChrW(&H65B9)" であるべき ところですが、これは完全にデータが破損していますね…。 UTF-8 バイナリ (E59CB0-E696B9) を、Shift_JIS でデコードした場合、その内容は E59C 蝨 B0 ー(半角) E696 譁 B9 ケ(半角) の 4 文字になるはずです。 まだこの状態であれば、ただの文字化けであり、データ破損は起こしていないので 対処のしようもあったのですが、今回は E59C-B0-E696 に損失しているのですから、 もはや復元は不可能ですね…。 > 表示できない理由をご教授下さい。 ここなどの VB 系のコミュニティで聞くよりも、どちらかとえば、ここよりも MySQL 系のコミュニティを利用された方が、直接的な回答が得られるかと思いますよ。 プログラム側に問題が無いとは言えませんが、文字化けとはあまり 関係無さそうな問題点しか見当たりませんでした。 どちらかといえば、環境設定やドライバ等の問題である気がします。 状況からみて、どこかで Shift_JIS への変換が走っているようなので、DB か ODBC に 「サーバーの文字コード設定をクライアントでもそのまま使う」ような設定やコマンドが あれば解決できるのでしょう。ただ、私は MySQL は専門外なので答えられませんが…。 # 以下、本題とは関係無さそうなですが、一応ツッコミ。 面倒でも、Option Strict を宣言する事をお薦めします。 変数のスペルミスなどによる意図しないバグが混入する事を防ぐ事ができますので。 > <% @CodePage="65001" Language="VBScript" %> > <?xml version="1.0" encoding="UTF-8"?> それから、別件ですが重要な点。上記のような記述は、その時点で NG です。 これですと、XML 宣言の前に改行コードが入っているため、不正な XML となってしまいます。 @ ディレクティブ と XML 宣言の間に、余計な文字を含めないようにしてください。 > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> そして、こちらもまた NG です。 XHTML 1.0 Strict の DTD を宣言されていますが、その後に続く HTML データが その DTD に従っていないため、これもまた文法的に不正です。 > response.write "【" & rs0("sikyokumei") & "】" テストコードだからかも知れませんが、これもまたマズイです。 まず、値を取得するために、既定のプロパティを使うべきではありません。 Collect プロパティまたは Value プロパティを使うようにしましょう。 それから、受け取ったデータをそのまま Response.Write する事は避けるべきです。 たとえば、データ中に HTML や XML として特別な意味を持つ値(<,",',&等々)が 含まれていると、表示データに問題が発生しますよね。 特に、今回のデータは XML なのですから、より厳密にならねばなりません。 > if Err.number <> 0 then この処理は無意味です。エラー処理が書かれていますが、肝心のエラートラップが しかけられていませんので、この部分が処理される事はありません > Response.End これも論外。エラーがあったからといって単純に End してしまうと、 出力結果が XML あるいは HTML の体裁を保てなくなりかねません。 異常時処理だからといって手を抜かないようにしましょう。 > sub mySQLrecordset(byref RS,msql) 記述するのであれば、むしろ msql 側に ByVal を付けるべきでしょうか。 VBScript の場合、引数の規定値は参照渡しですから、これでは冗長的です。 引数の渡し方を明示するのであれば、 Sub mySQLrecordset(ByRef RS, ByVal msql) または Sub mySQLrecordset(RS, ByVal msql) となるべきですし、その違いを気にしない人なら(本来は気にするべきですが) Sub mySQLrecordset(RS, msql) と書くでしょう。前者だけに ByRef が付くというのは、かなり違和感があります。 > mySQLcomm.ActiveConnection=mySQLconn これ(Let 処理)でも動作しますが、ここは本来、Set で代入すべき処理です。 > Set mySQLcomm=Server.CreateObject("ADODB.Command") > mySQLcomm.ActiveConnection=mySQLconn > mySQLcomm.CommandText=msql > mySQLcomm.Execute 問題はありませんが、これだけなら「mySQLconn.Execute msql」の一行で良いかも。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.