【问题标题】:XMLHTTP - Read iso-8859-2 content and write UTF-8XMLHTTP - 读取 iso-8859-2 内容并写入 UTF-8
【发布时间】:2014-02-19 14:37:23
【问题描述】:

我需要从 iso-8859-2 页面读取内容并在我的代码中以 UTF-8 写入。

代码示例:

<%@  language="VBSCRIPT" codepage="65001" %>
<%
    set xmlhttp=Server.CreateObject("Msxml2.XMLHttp.6.0")
    Set re=New RegExp
    re.IgnoreCase=True
    re.Global=True

    xmlhttp.open "get", link, false
    xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded; charset=ISO-8859-2"
    xmlhttp.send()
    html=xmlhttp.responsetext

    re.Pattern="<h1>.*?</h1>"
    set aux=re.execute(html)

    text = aux(0)
    response.write text
%>

原点原文:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" >
<h1>Novo público no interior</h1>

今天在 utf-8 页面上的输出:

"Novo pï¿¿o no interior"


我需要在 UTF-8 上正确输出文本。谁能帮帮我?

【问题讨论】:

  • 对不起,这不是一个真正的答案,但每次我必须谷歌字符串编码时,我都会遇到这篇文章,阅读它,解决我的问题,然后通常一周后就忘记了。 joelonsoftware.com/articles/Unicode.html

标签: encoding utf-8 vbscript asp-classic xmlhttprequest


【解决方案1】:

问题是.ResponseText 不会解码您的iso-8859-2 请参阅MSDN Documentation 中的此声明

IXMLHTTP 尝试将响应解码为 Unicode 字符串。它假定默认编码为 UTF-8,但只要服务器发送适当的 Unicode 字节顺序标记,就可以解码任何类型的 UCS-2(大端或小端)或 UCS-4 编码。

尝试使用.ResponseBody 代替,否则使用ADODB.Stream.ResponseStream 转换为UTF-8 失败,请参阅ASP: I can´t decode some character from utf-8 to iso-8859-1

【讨论】:

  • 谢谢!根据您的回复,我使用了 .ResponseBody(但该页面以二进制形式出现),因此我在 Google 上找到了将二进制转换为字符串的函数。我只是将我页面中的字符集设置为 UTF-8 和“Voilà”。谢谢!
  • html = BinaryToString(xmlhttp.responseBody)
  • @MarceloMadnezz 很高兴它对您有用,但您可能会发现将 ISO-8859-2 文本转换为 UTF-8ADODB.Stream 方法更强大,而不是将二进制转换为字符串(请参阅我的回答)。
  • 只是让您知道,我正在使用它从我的客户网站上读取“新闻”(我无权访问数据库)并将他们的“新闻”放入我的系统中.我稍后会检查ADODB.Stream
猜你喜欢
  • 2011-10-05
  • 2015-06-20
  • 2016-03-15
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多