2011-06-04 32 views
3

我正在寫一個vbscript從網頁中提取一些數據,去掉幾個關鍵信息並將它們寫入文件。字符編碼Vbscript中的Microsoft.XmlHttp

此刻我的腳本訪問的網頁並保存文件內容爲一個字符串是這樣的:

Set WshShell = WScript.CreateObject("WScript.Shell") 
Set http = CreateObject("Microsoft.XmlHttp") 

'Load Webpage where address is URL 
http.open "GET", URL, FALSE 
http.send "" 
'Assign webpage contents as a string to variable called Webpage 
WEBPAGE = http.responseText 

我需要將內容保存到一個字符串,所以我可以在其上使用正則表達式拉出我需要的內容。

這個腳本完美的工作,除了當頁面包含非標準字符(如é)時。當頁面包含這樣的內容時,腳本會拋出一個錯誤並停止。

我猜這是與編碼有關,但我不知道如何解決它。任何人都可以將我指向正確的方向嗎?謝謝你們

編輯

由於這裏幫助我意識到我問錯了問題!事實證明,我正在下載內容 - 問題是,之後我試圖編輯它並將其寫入文件,並且文件格式錯誤。我有這樣的:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True,) 

將其更改爲這樣:

Set objTextFile = objFSO.OpenTextFile(OutputFile, 8, True, -1) 

似乎已經解決了。多麼瘋狂的世界,呃?謝謝您的幫助。

回答

2

您可能需要設置正確的頭塊之前發送

如下面僅僅是一個例子。你需要找出這正是爲您的網站

http.open "GET", URL, FALSE 
    http.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" 
    http.SetRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" 
    http.SetRequestHeader "Accept-Language", "en-us,en;q=0.5" 
    http.SetRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7" 
    http.send "" 

編輯什麼:

這個怎麼樣吧。它的工作原理確定這裏

Dim XMLHttpReq,URL,WEBPAGE 
Const Eacute = "%C3%89" 

Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP") 

URL = "http://en.wikipedia.org/wiki/%C3%89" 
'Load Webpage where address is URL 
XMLHttpReq.Open "GET", URL, False 
XMLHttpReq.send "" 
'Assign webpage contents as a string to variable called Webpage 
WEBPAGE = XMLHttpReq.responseText 
WEBPAGE = Replace(WEBPAGE, Eacute, "É") 
'Debug.Print WEBPAGE 

在這種情況下,電子急性返回字符串爲%C3%89,你可以將它強制你選擇的角色如果需要的話。

EDIT2:

我想補充,如果你正在使用VBScript這樣做,你可能會發現這種方法非常有用

Dim XMLHttpReq, URL, WEBPAGE, fso, f 
Const Eacute = "%C3%89" 
Set XMLHttpReq = CreateObject("MSXML2.ServerXMLHTTP") 
URL = "http://en.wikipedia.org/wiki/%C3%89" 
XMLHttpReq.Open "GET", URL, False 
XMLHttpReq.send "" 
WEBPAGE = XMLHttpReq.responseText 

Save2File WEBPAGE, "C:\Users\osknows\Desktop\test.txt" 

Sub Save2File (sText, sFile) 
    Dim oStream 
    Set oStream = CreateObject("ADODB.Stream") 
    With oStream 
     .Open 
     .CharSet = "utf-8" 
     .WriteText sText 
     .SaveToFile sFile, 2 
    End With 
    Set oStream = Nothing 
End Sub 
+0

除非,我太傻了,我還是想不通出來。拿這個頁面爲例:http://en.wikipedia.org/wiki/? - 它看起來像是utf-8,但是當我將它粘在accept-charset中時,它仍會拋出同樣的錯誤。我想可以將文件作爲二進制文件加載,但我不想這樣做,因爲我想在輸出之前處理字符串。 – Simon 2011-06-06 21:16:56

+0

順便一提,謝謝你的幫助! – Simon 2011-06-06 21:17:14

+0

其實,忍耐着我,我有一個戲...可能會去吧! – Simon 2011-06-07 20:22:04