Xml Node.js HTTP客户端中的自动UTF-8编码

Xml Node.js HTTP客户端中的自动UTF-8编码,xml,encoding,response,httpclient,node.js,Xml,Encoding,Response,Httpclient,Node.js,在这里,我尝试使用Node.js从远程主机加载XML内容 问题是像“ä”这样的德国“umlaute”被打破了。就像在浏览器中一样,这通常是一个简单的编码问题。但是由于远程主机上的XML内容是用iso-8859-2编码的,“我没有成功地使这些信件恢复工作 功能非常简单。我只需使用Node.js中集成的默认HTTP客户端,通过简单的get请求连接到远程主机 一些环境事实: 远程系统使用“iso-8859-2”编码 编码当前在响应标头中设置 response.onData(chunk) Node.

在这里,我尝试使用Node.js从远程主机加载XML内容

问题是像“ä”这样的德国“umlaute”被打破了。就像在浏览器中一样,这通常是一个简单的编码问题。但是由于远程主机上的XML内容是用iso-8859-2编码的,“我没有成功地使这些信件恢复工作

功能非常简单。我只需使用Node.js中集成的默认HTTP客户端,通过简单的get请求连接到远程主机

一些环境事实:

  • 远程系统使用“iso-8859-2”编码
  • 编码当前在响应标头中设置
  • response.onData(chunk)
Node.js在da默认Debian服务器上的版本0.2上运行

代码基于Node.js文档中描述的默认httpClient

我尝试了以下方法:

response.defaultAsciiEncoding true/false
response.encoding = UFT-8/ascii
我使用UTF-8编码器/解码器对区块进行编码/解码。失败后,我尝试对整个响应体进行编码/解码


我不太熟悉缓冲区的使用,我想问题一定是在这个方向上。或者Node.js(或者httpClient)默认情况下无法处理其他编码类型,这是我的第二个猜测。在这种情况下,我需要使用我认为是的网络库编写自己的HTTP客户端。我只想确保我没有走错方向:)

尝试在XML声明中设置编码参数:

<?xml version="1.0" encoding="iso-8859-2" ?>
<xml>
  <!-- whatever -->
</xml>


XML文件默认为UTF-8,除非您明确声明其编码。

在我看来,Node.js无法使用UTF-8以外的编码。也许使用类似的方法应该可以工作。

我快速浏览了Node.js源代码,似乎svick是对的:Node.js不支持ISO编码。但是,您可以在响应为二进制流,然后使用您自己的编码将其返回到浏览器,或者使用节点iconv(同样是svick建议的)


这里有一个小例子:

远程源是动态的,不在我的控制之下。但是xml版本和编码是设置好的。我上传了一个sampleResponse到我的服务器。我可以添加一个node.js脚本来重现错误。示例位置是@age:不确定这应该是什么?它作为文本/html提供,没有编码参数ter.是的,对不起,我忘了正确模拟标题。我刚刚添加了内容类型标题。只是xml的doctype设置为iso-8859-1响应本身没有编码信息。以下是原始:连接:保持活动内容长度:181706内容类型:text/xml日期:Sun,2010年9月12日02:43:40 GMT服务器:Apache问题如果有,我找不到访问原始数据的点/事件。在response.onData(chunk)中,我看起来很感动。我可能会检查node.js libs以了解发生了什么。但是如果我在端口80上使用net.socket,您找到的绑定将无法使用。response.setEncoding(“二进制”);我真不敢相信我没有试过。不知何故,我在这里只尝试使用ascii。对于一个快速原型,我使用了php.js utf8_encode。工作非常完美。感谢您的回答和指向iconv绑定的链接。