`

asp utf-8 gbk

阅读更多

怪事,ServerXMLHTTP乱码,XMLHTTP却正常?

写道
2009-04-29 00:55:34 来自:帅の玹栤 浏览数:92次
VB code 'Set objXmlHttp=server.createobject("Microsoft.XMLHTTP") '用这句正常 'Set objXmlHttp=server.createobject("Msxml2.XMLHTTP.4.0") '用这句也正常 Set objXmlHttp=server.createobject("MSXML2.ServerXMLHTTP") '用这句则中文显示为乱码 objXmlHttp.open "GET","http://www.a-utf-8-page.com",false '访问页面为utf-8;gbk页面没问题 objXmlHttp.send() Response.BinaryWrite objXmlHttp.responseBody 'Response.Write BytesToBstr(objXmlHttp.responseBody,"GB2312")'用这句进行转换,依然输出乱码 Function BytesToBstr(body,CSet) '将2进制转换为文本字符 On Error Resume Next 'CSet :GB2312或UTF-8 Dim objstream Set objstream = Server.CreateObject("adodb.stream") With objstream .Type = 1 .Mode = 3 .Open .Write body .Position = 0 .Type = 2 .CharSet = CSet '显示编码 BytesToBstr = .ReadText .Close End With Set objstream = Nothing End Function

怪事了,其他两个都没问题的,MSXML2.ServerXMLHTTP这个东西看来有些另类啊。无论我怎么转换编码,就是不显示中文。客户端页面已设置为GB2312编码了。

 

写道
解决了,原来是URL传递的参数中有中文,用Microsoft.XMLHTTP和Msxml2.XMLHTTP.4.0这2个客户端的组件,他们能自动将URL中的中文进行编码,而用MSXML2.ServerXMLHTTP这个服务端的组件,它不会自动进行编码,于是报错.
 
写道
Set objXmlHttp=server.createobject("MSXML2.ServerXMLHTTP") '用这句则中文显示为乱码
objXmlHttp.open "GET","http://www.a-utf-8-page.com",false '访问页面为utf-8;gbk页面没问题
objXmlHttp.send()
Response.BinaryWrite objXmlHttp.responseBody

这4行代码关键问题就在第一行上,换成其他2个组件都没问题,不会有乱码.但ServerXMLHTTP却出现乱码.
 
写道
<script>
var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
oXmlHttp.open("GET","http://dotnet.aspx.cc/content.aspx", false);
oXmlHttp.send()
var oStream = new ActiveXObject("ADODB.Stream");
if(oStream == null)
alert("您的机器不支持ADODB.Stream.")
else
{
oStream.Type=1;
oStream.Mode=3;
oStream.Open() ;
oStream.Write(oXmlHttp.responseBody);
oStream.Position= 0;
oStream.Type= 2;
oStream.Charset="gb2312";
var result= oStream.ReadText();
oStream.Close();
oStream = null;
alert( result);
}
</script>
 
写道
responseText
将响应信息作为字符串返回
XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带 BOM(byte-order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。

__________

这个意思是说,如果相关页面是utf-8,则直接用responseText);返回的是unicode(win系统默认编码)

远程获取MSXML2.serverXMLHTTP 和 MSXML2.XMLHTTP

MSXML2.serverXMLHTTP 和 MSXML2.XMLHTTP在做一个垃圾站采集的时候遇到问题,用风讯 4.0采集到一定数目的时候总是提示 “出现一个意外错误: ”Send” ”,查看function.asp代码,发现问题应该是出在 MSXML2.XMLHTTP上,而且应该是win2003下容易出现。这种情况一般重启IIS,或者站点文件重置一下权限就可以解决。毫无疑问这种解决办法对大多数站长不适应,也不是我们的态度。
在网上查了查资料,发现出现这种问题的很多,不过都没有解决。风讯论坛上有一个提问的,没有答案。后来我试着将 MSXML2.XMLHTTP 在config2.asp 中修改为 MSXML2.serverXMLHTTP,BINGO!而且微软的文档也显示,不建议在服务器上使用 MSXML2.XMLHTTP,好像是因为会出现占用资源过高的情况吧。

 

 


XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

本文回答有关 ServerXMLHTTP 对象的一些常见问题。
更多信息
1. 什么是 ServerXMLHTTP?

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP 访问提供方法和属性。您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。


2. 如何安装 ServerXMLHTTP?

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以从以下 Microsoft Developer Network (MSDN) 网站下载并安装 MSXML 3.0:
http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en (http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en )
3. ServerXMLHTTP 具有什么平台要求?

ServerXMLHTTP 支持仅在安装 Microsoft Windows 2000 的计算机上或者在安装带 Microsoft Internet Explorer 5.01(或更高版本)的 Microsoft Windows NT 4.0 的计算机上提供。它在其他平台(如 Microsoft Windows 95 和 Microsoft Windows 98)上将失败。

由于 XMLHTTP 内部使用 WinInet,所以不支持在服务器端应用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的组件,或 Windows 服务中使用 XMLHTTP。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
238425 (http://support.microsoft.com/kb/238425/ ) 不支持在服务中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之间的区别是什么?

XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之间做出选择?

正如其名称所示,ServerXMLHTTP 推荐用于服务器应用程序,而 XMLHTTP 推荐用于客户端应用程序。XMLHTTP 具有一些优点,如支持缓存和自动发现代理。它可以在 Windows 95 和 Windows 98 平台上使用,并且非常适合单用户桌面应用程序。


6. 什么是代理配置实用工具?

WinHTTP 代理配置实用工具 Proxycfg.exe 允许将 WinHTTP 配置为通过代理服务器访问 HTTP 和 HTTPS 服务器。由于 ServerXMLHTTP 组件依赖于 WinHTTP 代理设置,因此在部署和安装使用 WinHTTP 的应用程序的过程中,管理员可以使用 Proxycfg.exe 实用工具。有关更多信息,请参见下面的 Microsoft 知识库文章:
289481 (http://support.microsoft.com/kb/289481/ ) 可能需要运行 Proxycfg 工具以使 ServerXMLHTTP 正常工作
7. ServerXMLHTTP 是否支持 SSL 和数字证书?

ServerXMLHTTP 和 XMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。

ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 证书支持。


8. ServerXMLHTTP 有什么优点?• 通过使用 ServerXMLHTTP,可以在本地和远程系统之间以流或 XML 文档的形式交换 XML 数据。
• 由于基础协议为 HTTP 或 HTTPS,因此可以在防火墙后的系统之间交换数据。
• ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP 请求。

9. ServerXMLHTTP 存在什么限制?

可同时存在于单一进程中的 ServerXMLHTTP 实例数主要取决于可用于系统上应用程序的内存大小。但是,其他因素(如 CPU 处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。

就 MSXML 3.0 而言,可同时存在于单一进程中的最大实例数为 5,460。


10. 在哪里可以找到有关 ServerXMLHTTP 的更多信息?

本文的大部分信息都取自 MSXML SDK,它可以从以下 MSDN 网站的 XML 部分下载:
http://msdn.microsoft.com/xml/default.aspx (http://msdn.microsoft.com/xml/default.aspx )

XMLHTTP传值如何在固定时间内没有取到返回值后自己中断

function send(url)
Dim xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP")     
xml.Open "GET", url, False
xml.Send
if xml.responseText<>"" then
send=xml.responseText'获得返回值
else
send="NO"'无法获得返回值
end if
Set xml = Nothing
end function
   
   
上面是同步方式发送数据,但是当无法得到返回值的时候就一直等待服务器的响应,这样很容易把服务器拖垮,我想设置在固定时间内(如30s)如果没有得到返回值就中断操作。
   
听说这要在异步方式下才能做到,但除了改这个参数,如何进行其它的步骤?
________________________________________________
可以试试ServerXMLHTTP
   
Dim xmlServerHttp
Set xmlServerHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")   
Dim lResolve, lConnect, lSend, lReceive
lResolve = 5 * 1000
lConnect = 5 * 1000
lSend = 15 * 1000
lReceive = 15 * 1000
xmlServerHttp.setTimeouts lResolve, lConnect, lSend, lReceive
xmlServerHttp.open "GET", "http://localhost/sample.xml ", False
xmlServerHttp.send

MSXML2.ServerXMLHTTP使用实例
<%
'使用范例
'读取URL 的HTML
dim myHttp
set myHttp=new xhttp
myHttp.URL="http://www.baidu.com "
Response.Write(myHttp.html)
'保存远程图片到本地
myHttp.URL="http://www.baidu.com/img/logo.gif "
myHttp.saveimage "myfile.gif"
'为防止xhttp卡死的情况,使用超时,错误处理
dim sHtmlcode,iStep
myHttp.URL="http://www.hrbshopping.com "
sHtmlcode=myHttp.html
iStep=0
do while myHttp.xhttpError=""
Response.Write("ERROR: AGAIN!<br />")
sHtmlcode=myHttp.html
iStep=iStep+1
if iStep=1 then
Response.Write("ERROR:OVER!<hr />")
exit do
end if
loop
Response.Write(sHtmlcode)
set myHttp=nothing

'--------------------------------------------------------------------
Class xhttp
private cset,sUrl,sError
Private Sub Class_Initialize()
'cset="UTF-8"
cset="GB2312"
sError=""
end sub

Private Sub Class_Terminate()
End Sub

Public Property LET URL(theurl)
sUrl=theurl
end property
public property GET BasePath()
BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
end property
public property GET FileName()
FileName=mid(sUrl,InStrRev(sUrl,"/")+1)
end property
public property GET Html()
Html=BytesToBstr(getBody(sUrl))
end property

public property GET xhttpError()
xhttpError=sError
end property

private Function BytesToBstr(body)
on error resume next
'Cset:GB2312 UTF-8
dim objstream
set objstream = Server.CreateObject("adodb.stream")
with objstream
.Type = 1 '
.Mode = 3 '
.Open    
.Write body '
.Position = 0 '
.Type = 2 '
.Charset = Cset '
BytesToBstr = .ReadText '
.Close
end with
set objstream = nothing
End Function

private function getBody(surl)
on error resume next
dim xmlHttp
'Set xmlHttp=server.createobject("Msxml2.XMLHTTP.4.0")
'set xmlHttp=server.createobject("Microsoft.XMLHTTP")
set xmlHttp=server.createobject("MSXML2.ServerXMLHTTP")
xmlHttp.setTimeouts 10000,10000,10000,30000
xmlHttp.open "GET",surl,false
xmlHttp.send
if xmlHttp.readystate=4 then
'if xmlHttp.status=200 then
   getBody=xmlhttp.responsebody
'end if
   else
   getBody=""
end if

if Err.Number<>0 then
sError=Err.Number
Err.clear
else
sError=""
end if
set xmlHttp=nothing
end function

Public function saveimage(tofile)
on error resume next
dim objStream,imgs
imgs=getBody(sUrl)
Set objStream = Server.CreateObject("ADODB.Stream")
with objStream
.Type =1
.Open
.write imgs
.SaveToFile server.mappath(tofile),2
.Close()
end with
set objstream=nothing
end function
end class
%>

分享到:
评论

相关推荐

    百度编辑器ueditor-dev-1.5.0 gbk-asp 编译版

    **百度编辑器ueditor-dev-1.5.0 gbk-asp 编译版详解** 百度编辑器(UEditor)是百度公司推出的一款强大的Web在线富文本编辑器,旨在为用户提供一个所见即所得(WYSIWYG)的编辑环境。它的主要特点是轻量级、高度可...

    将WEB程序模版等批量从gbk转utf-8/big5

    全功能转换GBK,BIG5,UTF-8软件,方便各位转换ASP,PHP源码。 很多朋友都在问要utf或者big5的插件,在此送上本人网上找到的一款免费软件,优点是可以快速的转换文档编码,而且一次性输入目录之后会自动查找目录下要转换的...

    asp模板生成调用类(GBK+UTF-8)

    "GB2312AwaHtmlClass"和"UTF-8AwaHtmlClass"是两个不同的压缩子文件,分别代表使用GBK编码和UTF-8编码实现的ASP模板生成类。这些类可能包含了处理不同编码方式下的HTML模板生成方法,比如读取模板文件,替换占位符,...

    PHP+ASP版汉字转拼音源码-

    * 汉字转拼音,自动识别GBK\UTF-8 * PHP版汉字转拼音类的说明: * 1.)根据网上汉字拼音字典库修改而成。 * 2.)包括了常用的GBK汉字:共20901字,131K. * 3.)每种拼音为一行,如果需要增加新字库,在对应行后面...

    asp下解决UTF_8乱码问题

    例如,数据库中存储的是UTF-8编码的数据,但在查询时使用了GBK编码,这会导致乱码。 3. **服务器配置问题**:IIS(Internet Information Services)服务器默认可能不支持UTF-8,需要进行相应配置。 4. **数据传输...

    ASP中Utf-8与Gb2312编码转换乱码问题的解决方法 页面编码声明

    在ASP(Active Server Pages)开发中,编码问题是一个常见的挑战,特别是当站点包含不同编码格式的页面时,如UTF-8和GBK(GB2312)。当用户在浏览使用UTF-8编码的页面之后,再访问GBK编码的页面时,由于浏览器会根据...

    百度编辑器ueditor-dev-1.5.0 utf8-asp 编译版

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。此版本为dev-1.5.0 utf8-asp

    asp下GB2312转UTF8编码

    不同的编码标准用于表示各种字符集,例如GBK(GB2312)和UTF-8。在ASP(Active Server Pages)环境中,有时我们需要将GB2312编码的字符串或文件转换为UTF-8编码,以便在多语言环境下兼容性更强。本篇将详细介绍ASP中...

    asp 读取 utf-8格式文档并生成utf-8格式文档的乱码问题

    在ASP中,默认的页面编码可能是GBK或GB2312,与UTF-8不兼容,因此在读取和输出UTF-8编码的文件时,需要进行相应的设置。 初始的错误代码如下: ```asp set objrs=server.createObject("Scripting....

    ASP实例开发源码—gb2312和utf-8文件编码互换源码asp版 v1.05.zip

    这个实例开发源码——“ASP实例开发源码—gb2312和utf-8文件编码互换源码asp版 v1.05.zip”提供了一个功能,即在ASP环境中实现GBK(GB2312)编码与UTF-8编码之间的转换。这种转换对于处理不同编码格式的文本数据,...

    ASP UTF-8编码生成静态网页的函数

    由于中文Windows系统中,File System Object(FSO)创建的文件默认编码格式通常是GB2312或GBK,而不是国际上更常用的UTF-8编码。在处理包含非拉丁字符集的语言时,如俄语等,这种默认编码会导致乱码。 FSO对象只...

    asp下UTF-8页面乱码的解决方法

    ### ASP 下 UTF-8 页面乱码的解决方法详解 #### 一、引言 在Web开发过程中,尤其是早期使用ASP进行开发的时候,遇到字符编码问题是很常见的。其中一种典型的问题就是在ASP环境下使用UTF-8编码时出现的乱码现象。...

    文件编码转换 utf8转gbk gbk转utf8

    在eclipse编程过程中,如果遇到乱码问题,可以讲此工程放置到workspace目录下进行转码,但是使用者需对代码中的文件路径进行相应的修改。 使用时,需将要转码的文件放到一个文件夹中,在workspace中新建一个system...

    Asp获取网页源码,支持GB2312、utf-8

    小巧好用,没有乱码,无错误。 调用方法: UrlCode = getHTTPPage("http://www.xxx.com/")

    ASP生成静态文件编码为UTF-8格式的HTML文件

    值得注意的是,ADODB.Stream的`Charset`属性支持多种编码,包括但不限于UTF-8、GBK、ISO-8859-1等。你可以在网页编码大全 CodePage CharSet 中英文显示名称中找到更多关于不同编码的信息,以满足各种需求。 此外,...

    asp中通过fso读取和生成UTF-8编码的txt

    这是因为FSO并不直接支持创建或读取UTF-8编码的文件,它通常会默认使用系统默认的编码,如GBK或ANSI。 当我们尝试使用FSO的OpenTextFile方法读取UTF-8编码的文件时,或者使用FSO的Save方法保存文件时,如果没有指定...

    飞天下载系统FTDMS ASP V5.0 UTF-8 build110507.rar

    【功能简介】  1、采用静态缓存技术,所有面页均由ASP快速一次性生成HTM。  2、采用符合Web2.0标准的XHTML CSS开发而成。  3、生成所有页面均能通过XHTML CSS校验!...8、新增可以引用他人站点下载地址功能.

    asp codepage.txt

    假设有一个ASP页面,需要接收GBK编码的数据,并将其转换为UTF-8编码存储到数据库中。这里的关键在于正确设置页面的`&lt;%@codepage=%&gt;`属性。 1. **设置页面编码**:在ASP页面中设置`&lt;%@codepage=65001%&gt;`,即指定使用...

    客齐齐企业网站KQIQIECMS 2.3 简体UTF-8.rar

    客齐齐企业网站KQIQIECMS基于ASP Access技术开发的企业内容管理系统。系统主模块:产品,资讯,单页面,招聘,留言。其中产品和资讯支持自定义字段。...8.循环标签调用更新调用方法 9.修正已知BUG。

    Jquery serialize() 中文乱码及解决方法

    第一次 encodeURI 是将中文数据按照 UTF-8 方式获取字节数组,然后将每个字节转化成对应的 16 进制数。例如,如果输入的中文是“中”,那么第一次 encodeURI 将其变成 [%E4,%B8,%AD]。 第二次 encodeURI 则是将数组...

Global site tag (gtag.js) - Google Analytics