none
VBScriptからADODB経由で接続すると文字化けする RRS feed

  • 質問

  • 初めて質問させて頂きます。宜しくお願い致します。

     

    Windows2000(英語版)+MS SQL2000(英語版)を使用しています。テーブルを作成し、あるフィールドに日本語のデータを格納しているのですが、特にVARCHARのフィールドなので、Shift-JISでデータは格納されています(ここまでは、何とか調べられました)。

     

    このMS SQLサーバに、ASPからADODBを使用して接続し、クエリー結果をレコードセットオブジェクトに格納してから、FileSystemオブジェクト経由でファイルに落とすと、ちゃんと文字化けせず字にShift-JISでデータが書き込まれます。

     

    しかし、まったく同じコードのVBScript(.vbs)で作成(もちろんServer.CreateObjectなど細かいところは変更していますが)し、コマンドラインから実行すると、見事に文字化けしてファイルに書き込まれます。

     

    すごく不思議な現象で、ASP経由だと恐らくMETAタグでShift-JISを明示的に指定しているので、Shift-JISでデータが返ってきて、文字化けせずにすむと思うのですが、VBScriptのファイルもそういう意味では、Shift-JISで書かれているのでShift-JISでデータが返ってきてもおかしくないと思うのですが返ってきません。

     

    そこで、ご質問なのですが、そもそも英語版のSQLサーバに対し、クエリー結果をShift-JISで返すようにTransact-SQLで指定することはできのでしょうか?(たとえば SET LANGUAGE Japaneseみたいな形で)

    もしくは、VBScriptからADODB経由でクエリーを投げる際に、明示的にShift-JISで指定することは出来のでしょうか?

     

    宜しくお願い致します。

    2007年7月12日 13:15

すべての返信

  • VBScript が実行されるデータベース クライアントは英語版ですか?

    もし英語版なら Language for non-Unicode Program に Japanese (Shift_JIS) を指定しないといけないんじゃないでしょうか。

    質問の記述を見ると、SQL Server が返しているデータがおかしいという書き方ですが、多分クライアントが日本語を理解できないんじゃないかと思います。ちなみに ASP の場合は @CODEPAGE で言語を設定できます。

     

    Enabling International Support in Windows XP/Server 2003 Family

    http://www.microsoft.com/globaldev/handson/user/xpintlsupp.mspx

     

    Windows 2000 は使ってないのですが、2000 では System Locale がそれに相当すると思いました。

    上のリンクには Windows 2000 での設定の仕方も載っているのでそちらも見てみてください。

     

    スクリプト エンジンの方で、ASCII の時の文字コードセットを指定することができればいいのですが、その方法はわかりません。

    2007年7月12日 14:16
  • > スクリプト エンジンの方で、ASCII の時の文字コードセットを指定することができればいいのですが、その方法はわかりません。

    SetLocale/GetLocale という関数が VBScript にありました。これでロケールを設定すればいいのではないでしょうか。

     

    SetLocale 関数

    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/vtoriobjects.asp

     

    ロケール ID (LCID) の一覧

    http://msdn.microsoft.com/library/ja/script56/html/vsmscLCID.asp

    2007年7月12日 14:35
  • ご回答頂き、有難う御座います。

    ご指摘の通り、クライアント側の情報を記載することを忘れておりました。申し訳ありません。

    クライアントはWindows2000のマルチリンガルで、Localeを日本語に設定して使用しています。

     

    確かに、ASPでは@CODEPAGEで設定できるのですが、ご指摘の通り、私もスクリプトエンジン側で

    CODEPAGEを設定することが分からず、悩んでいました。

     SetLocale関数があるとは知りませんでした。すいません、VBScriptリファレンスをくまなく見ていたつもりになっていました。挑戦してみます。

     

    皆様ご回答有難う御座いました。解決したら、ご報告させていただきます。

    2007年7月13日 0:09