2016-01-17 52 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