我正在从API接收XML数据。数据在我的服务器上转换为JSON,并保存在Mongo数据库中。
问题是,我收到的XML是在ISO-8859-1中编码的,并使用斯堪的纳维亚字母å,ä和ö。响应头中未指定编码。
我可以在浏览器中查看XML,特殊字母显示得很好,但是在我的GET请求响应中,特殊字母在控制台和MongoDB中的黑框(�)中显示为问号。
在我的GET请求中,我发送了"Content-Type": "application/xml; charset=utf-8"
标头,但响应仍按照ISO-8859-1发送。
我在这里有什么选择?我可以以某种方式将转换为正确的字符吗?
附加信息
再次更新:
response = HTTP.call('GET', 'http://removed.url/rss.xml', {
headers: {
"Accept-Charset": "utf-8"
}
});
data = Buffer.from(response.content, 'binary').toString('binary');
console.log(data);
最佳答案
在Content-Type
响应中发送GET
没有任何意义。该标头指示资源的媒体类型,服务器是发送此标头以响应您的GET
请求的。同样,它可以在PUT
或POST
请求中发送,以指示已发送内容的媒体类型。
您可能应该使用Accept-Charset
标头,它告诉服务器客户端可以理解哪些字符集:
Accept-Charset: utf-8
另外,这可能是
XML
与ISO-8859-1
字符集一起发送的原因:在HTTP / 1.1的早期版本中,定义了默认字符集(ISO-8859-1)。情况不再如此,现在每种内容类型都可以具有自己的默认值。
无论如何,如果您使用的此api服务不支持
Accept-Charset
,则可以在将其存储到数据库之前自行转换编码。添加:
将此响应内容转换为
utf8
是一件棘手的事情:流星的HTTP.call
已将其作为utf8
字符串返回,因此在response.content
中,您已经将ISO-8859-1
字符串视为utf8
字符串。您必须使用
Buffer
将其转换回:data = Buffer.from(response.content, 'binary').toString('binary');
我已经使用此网址亲自对其进行了测试,并且可以正常工作。
关于javascript - 将ISO-8859-1 XML转换为UTF-8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45786899/