• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBScriptでEUC文字列をSJIS文字列に)

VBScriptでEUC文字列をSJIS文字列に変換する方法

このQ&Aのポイント
  • VBScript+WSHを使って、変数に入っているEUC-JP文字列をShift_JIS文字列に変換する方法を教えてください。
  • ウェブで情報を探しても、ファイルを扱う方法ばかりで、EUC-JPからShift_JISへの変換方法が見つかりません。
  • EUC-JP文字列はxmlHTTPrequestでウェブサイトから得たものなので、その段階でShift_JISに変換する方法があれば教えてください。

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

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

> xmlHTTPrequestでウェブサイトから得た物なので ご参考 「Webページを取り込むと文字化けしてしまう。」

参考URL:
http://web.archive.org/web/20050310113902/http://www2.moug.net/app/bbs/message.php?cat=acm_v&id=20050219-000004
notnot
質問者

お礼

うまくいきました!ありがとうございます。 No5の方のお礼に書きましたが、自分のスクリプトに取り込むところでresponseTextとresponseBodyをミスっておりました。 微妙な仕様ですね。

notnot
質問者

補足

情報ありがとうございます。 .Open .Type = 1 .Write oHttp.responseBody .Position = 0 .Type = 2 .Charset = "euc-jp" retval = .ReadText .Close だと、.Writeのところで下記エラーになります。「ADODB.Stream: 引数が間違った型、許容範囲外、または競合しています。」 .WriteTextにすると、 「ADODB.Stream: このコンテキストで操作は許可されていません。」 だし。

その他の回答 (4)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

『役に立った』『参考になった』を投じたのは私です。 #1さんので こちら(Windows 7 Pro 64bit)では下記のVBSで『エラーにはなりませんでした』よ。 勘違い珍怪答のような気もします。ご参考まで。 Dim oHttp Dim strURI Dim ADO ' 変数を初期化します。 strURI = "http://db.netkeiba.com/index.php?" _ & "pid=horse_detail&id=2002101806" On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If (Err.Number <> 0) Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") End If On Error GoTo 0 If oHttp Is Nothing Then MsgBox "XMLHTTP オブジェクトを作成できませんでした。", vbCritical wscript.quit End If set ADO =createobject("Adodb.Stream") ' HTTP リクエストを送信します。 oHttp.Open "GET", strURI, False oHttp.Send ' 失敗した場合は関数を終了します。 If (oHttp.Status < 200 Or oHttp.Status >= 300) Then wscript.quit ' HTML ソースを格納します。 Dim retval With ADO .Open .Type = 1 'adTypeBinary .Write oHttp.responseBody .Position = 0 .Type = 2 'adTypeText .Charset = "euc-jp" retval = .ReadText .Close End With msgbox retval ' オブジェクト変数の参照を解放します Set oHttp = Nothing ' 戻り値をセットします。 'GetHtmlSource = True

notnot
質問者

お礼

ありがとうございます。 いまやるとエラーになりませんね。 と、前のを見直すと、なんと、oHttp.responseBody ではなくて、oHttp.responseTextを使っていました。 もともとそれを使っていたので、違いに気づかず。 responseBodyはByte()なんですね。 これで出来そうです。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.4

こちらもご参考に。

参考URL:
https://gist.github.com/honda0510/805649
notnot
質問者

お礼

No1の方の回答で実は解決していました。 ありがとうございました。

notnot
質問者

補足

ありがとうございます。これとNo3の方の回答を組み合わせて、 Set bstream = New ByteStream Set es = WScript.CreateObject("ADODB.Stream") es.Type = 1 es.Open eucstr="あいう" '文字コードはEUC-JP For i=1 To lenb(eucstr) es.Write bstream.getByte(ascb(midb(eucstr,i,1))) Next es.Position = 0 es.Type = 2 es.Charset = "euc-jp" Set ss = WScript.CreateObject("ADODB.Stream") ss.Open ss.Type = 2 ss.Charset = "Shift_JIS" es.CopyTo ss ss.Position = 0 ss.Type = 1 WScript.Echo ss.Read としてみましたが、やっぱりだめですね。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3
notnot
質問者

お礼

ありがとうございます。 今回の要件とは関係ありませんでしたが、今後こういうことをしたいときには思い出そうと思います。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

「vbs adodb.stream バイナリ」 でググるとか。

notnot
質問者

補足

>「vbs adodb.stream バイナリ」 ググってますけど、「VBSだとBYTE型配列が作れないからだめ」というのが結論だと判断しました。 別のStreamにテキストで書いて、バイナリで読み直して、それを書くというのもやってみた。 set x=CreateObject("ADODB.Stream") set y=CreateObject("ADODB.Stream") x.open x.writetext eucstring x.position = 0 x.type = 1 w = x.read x.close y.Open y.type = 1 y.write w y.position = 0 y.type = 2 y.charset = "euc-jp" WScript.Echo y.ReadText

関連するQ&A

専門家に質問してみよう