2016-01-17 82 views
0

我有這些ASP腳本緩存ASP ANSI轉換爲基於Unicode文本文件

fn = "caches/"&md5(url)&".html" 

// Grab HTML file from site 
set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.3.0") 
oXMLHTTP.Open "GET", url, false 
oXMLHTTP.Send 

// Save it 
set fs = Server.CreateObject("Scripting.FileSystemObject") 
set file = fs.CreateTextfile(fn,false,true) 
file.Write oXMLHTTP.responseText 
file.close 

// Open it and print to screen 
set file = fs.OpenTextFile(fn,1) 
response.write file.ReadAll 
file.Close 
response.end 

保存的文件是「統一BOM」編碼,這將導致焦炭問題。當我將編碼轉換爲「ANSI」時,一切都如預期的那樣正常。

如何將「oXMLHTTP.responseText」程序化地轉換爲「ANSI」?

+0

,我建議使用'的Server.CreateObject(「MSXML2.ServerXMLHTTP.6.0」)' - 這是最新版本MSXML – John

回答

0

最佳做法是保存二進制而不是文本。您可以使用oXMLHTTP.responseBody來訪問響應二進制文件。
但是,如果您確定響應文本與您的區域設置兼容,則可以安全地將響應文本保存爲ANSI,而不會出現問題。
爲此,您需要爲CreateTextFile方法的第三個參數傳遞False

set file = fs.CreateTextfile(fn, false, false) 

但我強烈建議你保存像下面的二進制:

Dim Stm 
Set Stm = Server.CreateObject("Adodb.Stream") 
    Stm.Type = 1 'adTypeBinary, to set binary stream 
    Stm.Open 
    Stm.Write oXMLHTTP.responseBody ' bytes of http response 
    Stm.SaveToFile fn 'response saved as is 
    Stm.Close 
Set Stm = Nothing 
+0

第三個「假」適合我!謝謝! – Digerkam