Javascript 将XML解析为JSON UTF-8
我使用xml2js,因为我需要将XML提要转换为JSON。 但是当我收到XML时,它会像预期的那样显示Æ,Ø&Å。但是在解析它之后 我收到: Øas\ufffd或�. 我已经将编码设置为UTF-8,所以我不确定我做错了什么。谁能告诉我:-) 更新: 我试着跟随你的脚步。如果我获取XML并将其存储在本地的.XML文件中,一切都会很好。但是如果我从我的源代码(完全相同的GET请求)获取它,那么它就不工作了 对curl-v>download.xml的响应Javascript 将XML解析为JSON UTF-8,javascript,json,node.js,express,xml2js,Javascript,Json,Node.js,Express,Xml2js,我使用xml2js,因为我需要将XML提要转换为JSON。 但是当我收到XML时,它会像预期的那样显示Æ,Ø&Å。但是在解析它之后 我收到: Øas\ufffd或�. 我已经将编码设置为UTF-8,所以我不确定我做错了什么。谁能告诉我:-) 更新: 我试着跟随你的脚步。如果我获取XML并将其存储在本地的.XML文件中,一切都会很好。但是如果我从我的源代码(完全相同的GET请求)获取它,那么它就不工作了 对curl-v>download.xml的响应 Connected to localhost
Connected to localhost (::1) port 9090 (#0)
GET /products.xml HTTP/1.1
Host: localhost:9090
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Thu, 07 Jun 2018 09:56:41 GMT
ETag: W/"9471b6-163d9ad4696"
Content-Type: text/xml; charset=UTF-8
Content-Length: 9728438
Date: Thu, 07 Jun 2018 10:00:09 GMT
Connection: keep-alive
将curl响应到“真实”源(如果有必要,这是一个https请求)
我已经设置了一些脚本文件来复制您的结果。。据我所见,一切似乎都正常 我已经创建了一个express服务器来服务一个包含Ø字符的静态XML文件。这总是一个很好的地方,从这些问题开始,隔离问题 server.js
const express = require("express");
const app = express();
const port = 3000;
app.use('/', express.static(__dirname));
app.listen(port);
console.log('Express started on port ' + port + '...');
const xml2js = require('xml2js')
const parser = new xml2js.Parser()
const http = require('http');
var url = 'http://localhost:3000/test.xml';
http.get(url, (response) => {
var response_data = '';
// Try latin1 encoding.
response.setEncoding('latin1');
response.on('data', function (chunk) {
response_data += chunk;
});
response.on('end', function () {
parser.parseString(response_data, function (err, result) {
if (err) {
console.log('Got error: ' + err.message);
} else {
console.log('Result JSON: ', JSON.stringify(result, null, 4));
}
});
});
});
index.js
const express = require("express");
const app = express();
const port = 3000;
app.use('/', express.static(__dirname));
app.listen(port);
console.log('Express started on port ' + port + '...');
const xml2js = require('xml2js')
const parser = new xml2js.Parser()
const http = require('http');
var url = 'http://localhost:3000/test.xml';
http.get(url, (response) => {
var response_data = '';
// Try latin1 encoding.
response.setEncoding('latin1');
response.on('data', function (chunk) {
response_data += chunk;
});
response.on('end', function () {
parser.parseString(response_data, function (err, result) {
if (err) {
console.log('Got error: ' + err.message);
} else {
console.log('Result JSON: ', JSON.stringify(result, null, 4));
}
});
});
});
test.xml
<root>
<testÅØ id="198787">
</testÅØ>
</root>
我想知道原始XML文件是否有问题。
我会尝试使用curl下载数据,看看文件是什么样子,例如
curl urlForRequest-v>download.xml
Connected to localhost (::1) port 9090 (#0)
GET /products.xml HTTP/1.1
Host: localhost:9090
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Thu, 07 Jun 2018 09:56:41 GMT
ETag: W/"9471b6-163d9ad4696"
Content-Type: text/xml; charset=UTF-8
Content-Length: 9728438
Date: Thu, 07 Jun 2018 10:00:09 GMT
Connection: keep-alive
我会检查标题回来,我会
curl http://localhost:3000/test.xml -v > download.xml
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Thu, 07 Jun 2018 09:10:31 GMT
ETag: W/"34-163d982ff58"
Content-Type: text/xml; charset=UTF-8
Content-Length: 52
Date: Thu, 07 Jun 2018 09:52:46 GMT
Connection: keep-alive
对于我的设置。我可以看到真实文件的编码是iso-8859-1,我打赌这就是问题所在!有什么建议,如何修复吗?也许可以试试这个:response.setEncoding(“拉丁1”);我会更新我的答案。文件的编码不是UTF-8,所以我们应该尝试其他方法!杰出的服务器应该使用utf8,但这是一个很好的解决方法!