我正在从 API 接收 XML 数据。数据在我的服务器上转换为 JSON 并保存在我的 Mongo 数据库中。
问题是,我收到的 XML 以 ISO-8859-1 编码并使用斯堪的纳维亚字母 å、ä 和 ö。响应 header 中未指定编码。
我可以在我的浏览器中查看 XML,特殊字母显示得很好,但在我的 GET 请求响应中,特殊字母在控制台和MongoDB。
在我的 GET 请求中,我发送了 "Content-Type": "application/xml; charset=utf-8"
header ,但响应仍以 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);
最佳答案
在 GET
响应中发送 Content-Type
没有意义。此 header 指示资源的媒体类型,服务器发送此 header 以响应您的 GET
请求。此外,它可以在 PUT
或 POST
请求中发送,以指示发送内容的媒体类型。
您可能应该使用 Accept-Charset
header ,它告诉服务器客户端能够理解哪些字符集:
Accept-Charset: utf-8
此外,这可能是 XML
使用 ISO-8859-1
字符集发送的原因:
In early versions of HTTP/1.1, a default charset (ISO-8859-1) was defined. This is no more the case and now each content type may have its own default.
无论如何,如果您使用的此 api 服务不支持 Accept-Charset
,您可以在将其存储到数据库之前自行转换编码。
添加:
将此响应内容转换为 utf8
是一件棘手的事情:Meteor 的 HTTP.call
已将其作为 utf8
字符串返回,因此在 response.content
您已经将 ISO-8859-1
字符串视为 utf8
字符串。
您必须使用 Buffer
将其转换回来:
data = Buffer.from(response.content, 'binary').toString('binary');
我自己用这个 url 测试了它,它按预期工作。
关于javascript - 将 ISO-8859-1 XML 转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786899/