将 XML 转换为 JSON 时如何解决编码问题?

Posted

技术标签:

【中文标题】将 XML 转换为 JSON 时如何解决编码问题?【英文标题】:How to fix encoding problem when convert XML to JSON? 【发布时间】:2021-06-23 14:17:27 【问题描述】:

我有一个 xml 文件。我需要将xml文件转换为json格式并用节点js写成html

下面的 XML 文件

<?xml version="1.0" encoding="windows-1251" ?>
<ROWDATA>

<ROW>
  <REG1_CODE>02</REG1_CODE>
  <REG1>Вінницька обл.</REG1>
  <REG2_CODE>19</REG2_CODE>
  <REG2>Тиврівський р-н</REG2>
  <REG3_CODE>001</REG3_CODE>
  <REG3>с. Борсків</REG3>
</ROW>
</ROWDATA>

我将xml转换为json的代码

const fs = require('fs')
const xml2js = require('xml2js')
const parser = new xml2js.Parser()
const http = require('http')
const util = require('util')

function onRequest(request, response) 
    response.writeHead(200, 'Content-Type' : 'text/plain;');
    fs.readFile('regions.xml', null, function (error, data) 
        parser.parseString(data, (err, result) => 
            if (error) 
                response.writeHead(404);
                response.write('Bla bla');
             else 
                response.write(util.inspect(result, false, null, true))

            
            response.end();
        )
    )

http.createServer(onRequest).listen(8000)

此代码输出。


  ROWDATA: 
    ROW: [
      
        REG1_CODE: [ [32m'02'[39m ],
        REG1: [ [32m'ВіпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ.'[39m ],
        REG2_CODE: [ [32m'19'[39m ],
        REG2: [ [32m'пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ-пїЅ'[39m ],
        REG3_CODE: [ [32m'001'[39m ],
        REG3: [ [32m'пїЅ. пїЅпїЅпїЅпїЅпїЅпїЅ'[39m ]
      ,

如何解决这个编码问题?

【问题讨论】:

【参考方案1】:

你可以试试fs.readFile(filepath, encoding: 'utf-8' , function (err, data) )吗?

此处记录了其他选项https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback

【讨论】:

以上是关于将 XML 转换为 JSON 时如何解决编码问题?的主要内容,如果未能解决你的问题,请参考以下文章

将 XML 转换为 JSON 和 Vice Versa,以及如何在发出 XML 请求时识别 REST 端点?

使用 Json.Net 转换为 XML 时如何序列化空数组

xml转换为json格式时,如何将指定节点转换成数组 Json.NET

如何将 JSON 数据转换为 XML 格式数据并在 React JS 中下载文件

当我尝试写入文件时,将 JSON 转换为 XML 错误

如何将 XML 转换为具有二进制数据内容的 Json