Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将XML解析为JSON UTF-8_Javascript_Json_Node.js_Express_Xml2js - Fatal编程技术网

Javascript 将XML解析为JSON UTF-8

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

我使用xml2js,因为我需要将XML提要转换为JSON。 但是当我收到XML时,它会像预期的那样显示Æ,Ø&Å。但是在解析它之后

我收到: Øas\ufffd或�.

我已经将编码设置为UTF-8,所以我不确定我做错了什么。谁能告诉我:-)

更新:

我试着跟随你的脚步。如果我获取XML并将其存储在本地的.XML文件中,一切都会很好。但是如果我从我的源代码(完全相同的GET请求)获取它,那么它就不工作了

对curl-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响应到“真实”源(如果有必要,这是一个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,但这是一个很好的解决方法!