javascript - 将 ISO-8859-1 XML 转换为 UTF-8

标签 javascript xml meteor get

我正在从 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 请求。此外,它可以在 PUTPOST 请求中发送,以指示发送内容的媒体类型。

您可能应该使用 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/

相关文章:

javascript - 如何让在页面上下文中运行的 JavaScript 函数调用 puppeteer 函数?

c - 如何在不使用 docptr 的情况下将 CDATA 作为值添加到特定节点

meteor - 在使用meteor up 部署的生产服务器上运行meteor shell

javascript - 如何在reactjs和meteor中显示加载器?

javascript - 为什么这个 javascript 正则表达式文字不起作用?

javascript - 如何正确地将 JS 代码组织成更传统的类结构?

javascript - 如何通过javascript更改按钮点击时<a>标签的href

java - 如何在一个类中使用来自不同 xml 文件的按钮

c# - 使用 RestSharp 进行 Xml 序列反序列化

javascript - 在远程和本地连接上使用一个用户