アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBScript+WSHを使って、変数に入っているEUC-JP文字列をShift_JIS文字列に変換したいのですが、ウェブで情報を探しても、ファイルを扱う物ばかりです。

Set stream = CreateObject("ADODB.Stream")
stream.Charset = "EUC-JP"
stream.Open
stream.WriteText = eucstring ' この変数にはEUC-JP で文字列が入ってる
stream.Position = 0
stream.Charset = "Shift_JIS"
WScript.Echo "(" & stream.ReadText & ")"

とかやってみましたが、だめです。まさか「いったんファイルに書けば可能だが書かないと不可能」ということもないと思うのですが。。。。。

元のEUC-JP文字列は、xmlHTTPrequestでウェブサイトから得た物なので、その段階でShift_JISに変換する方法があるのならそれでも良いです。

よろしくお願いします。

A 回答 (5件)

> xmlHTTPrequestでウェブサイトから得た物なので



ご参考
「Webページを取り込むと文字化けしてしまう。」

参考URL:http://web.archive.org/web/20050310113902/http:/ …

この回答への補足

情報ありがとうございます。
.Open
.Type = 1
.Write oHttp.responseBody
.Position = 0
.Type = 2
.Charset = "euc-jp"
retval = .ReadText
.Close

だと、.Writeのところで下記エラーになります。「ADODB.Stream: 引数が間違った型、許容範囲外、または競合しています。」
.WriteTextにすると、
「ADODB.Stream: このコンテキストで操作は許可されていません。」
だし。

補足日時:2013/06/05 22:20
    • good
    • 0
この回答へのお礼

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

微妙な仕様ですね。

お礼日時:2013/06/13 23:11

『役に立った』『参考になった』を投じたのは私です。


#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
    • good
    • 0
この回答へのお礼

ありがとうございます。
いまやるとエラーになりませんね。

と、前のを見直すと、なんと、oHttp.responseBody ではなくて、oHttp.responseTextを使っていました。
もともとそれを使っていたので、違いに気づかず。

responseBodyはByte()なんですね。
これで出来そうです。

お礼日時:2013/06/07 19:55

こちらもご参考に。



参考URL:https://gist.github.com/honda0510/805649

この回答への補足

ありがとうございます。これと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

としてみましたが、やっぱりだめですね。

補足日時:2013/06/06 22:27
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/13 23:14

この辺りかなと。


http://tambourine.cocolog-nifty.com/dengon/2006/ …
http://web.archive.org/web/20071019031034/http:/ …

#PowerShellやVBやC#の方がいいのでは。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/13 23:13

「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

補足日時:2013/06/06 07:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!