- ベストアンサー
VBScriptでEUC文字列をSJIS文字列に変換する方法
- VBScript+WSHを使って、変数に入っているEUC-JP文字列をShift_JIS文字列に変換する方法を教えてください。
- ウェブで情報を探しても、ファイルを扱う方法ばかりで、EUC-JPからShift_JISへの変換方法が見つかりません。
- EUC-JP文字列はxmlHTTPrequestでウェブサイトから得たものなので、その段階でShift_JISに変換する方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> xmlHTTPrequestでウェブサイトから得た物なので ご参考 「Webページを取り込むと文字化けしてしまう。」
その他の回答 (4)
- nicotinism
- ベストアンサー率70% (1019/1452)
『役に立った』『参考になった』を投じたのは私です。 #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
お礼
ありがとうございます。 いまやるとエラーになりませんね。 と、前のを見直すと、なんと、oHttp.responseBody ではなくて、oHttp.responseTextを使っていました。 もともとそれを使っていたので、違いに気づかず。 responseBodyはByte()なんですね。 これで出来そうです。
- kumatti1
- ベストアンサー率60% (73/121)
こちらもご参考に。
お礼
No1の方の回答で実は解決していました。 ありがとうございました。
補足
ありがとうございます。これと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)
この辺りかなと。 http://tambourine.cocolog-nifty.com/dengon/2006/12/vbscript_1d8d.html http://web.archive.org/web/20071019031034/http://sei.qee.jp/program/hta/sample/bstream.html #PowerShellやVBやC#の方がいいのでは。
お礼
ありがとうございます。 今回の要件とは関係ありませんでしたが、今後こういうことをしたいときには思い出そうと思います。
- kumatti1
- ベストアンサー率60% (73/121)
「vbs adodb.stream バイナリ」 でググるとか。
補足
>「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
お礼
うまくいきました!ありがとうございます。 No5の方のお礼に書きましたが、自分のスクリプトに取り込むところでresponseTextとresponseBodyをミスっておりました。 微妙な仕様ですね。
補足
情報ありがとうございます。 .Open .Type = 1 .Write oHttp.responseBody .Position = 0 .Type = 2 .Charset = "euc-jp" retval = .ReadText .Close だと、.Writeのところで下記エラーになります。「ADODB.Stream: 引数が間違った型、許容範囲外、または競合しています。」 .WriteTextにすると、 「ADODB.Stream: このコンテキストで操作は許可されていません。」 だし。