
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に変換する方法があるのならそれでも良いです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> 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: このコンテキストで操作は許可されていません。」
だし。
うまくいきました!ありがとうございます。
No5の方のお礼に書きましたが、自分のスクリプトに取り込むところでresponseTextとresponseBodyをミスっておりました。
微妙な仕様ですね。
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
ありがとうございます。
いまやるとエラーになりませんね。
と、前のを見直すと、なんと、oHttp.responseBody ではなくて、oHttp.responseTextを使っていました。
もともとそれを使っていたので、違いに気づかず。
responseBodyはByte()なんですね。
これで出来そうです。
No.4
- 回答日時:
この回答への補足
ありがとうございます。これと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
としてみましたが、やっぱりだめですね。
No.3
- 回答日時:
この辺りかなと。
http://tambourine.cocolog-nifty.com/dengon/2006/ …
http://web.archive.org/web/20071019031034/http:/ …
#PowerShellやVBやC#の方がいいのでは。
No.2
- 回答日時:
「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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
エクセルで文字列の最大値を抽...
-
Excel COUNTIF の仕様について
-
fgets()の仕組みについてくわし...
-
SQL の Update文(?) と ...
-
エクセル 数値データを桁をそ...
-
textboxユーザーコントロールの...
-
VBA2005 16進を2桁で表示したい。
-
文字列チェック!ある文字から...
-
like演算子の使い方
-
Excelで指数表現しないようにす...
-
Msgboxの×が押されたとき
-
Excelで3E8を3.00E+8にしない方...
-
aaa.bbb.ccc という、「ドット...
-
VBの「As String * 128」とは?
-
ACCESSのSQLでのカンマ’認識に...
-
OnTime 使用時のプロシージャへ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報