在Node.js中从Windows-1251转换到UTF-8

Converting from Windows-1251 to UTF-8 in Node.js

本文关键字:转换 UTF-8 Windows-1251 中从 Node js      更新时间:2023-09-26

我需要将一个字符串从Windows-1251转换为UTF-8。

我试着用iconv这样做,但我得到的只是这样的东西:

пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ

var iconv = new Iconv('windows-1251', 'utf-8')
title = iconv.convert(title).toString('utf-8')

这是你的问题的有效解决方案。您必须先使用Buffer并将字符串转换为二进制。

const Iconv = require('iconv').Iconv;
request({ 
    uri: website_url,
    method: 'GET',
    encoding: 'binary'
}, function (error, response, body) {
        const body = new Buffer(body, 'binary');
        conv = Iconv('windows-1251', 'utf8');
        body = conv.convert(body).toString();
});

如果你从文件中读取,你可以这样写:

const iconv = require('iconv-lite');
const fs = require("fs");
fs.readFile("filename.xml", null, (err, data) => { 
    if(err) { 
        console.log(err)
        return
    }
    const encodedData = iconv.encode(iconv.decode(data, 'win1251'), 'utf8')
    fs.writeFile("result_filename.xml", encodedData, () => { })
})

我使用Node版本16,下面的代码可以正常工作。您不需要使用Buffer节点将写入警告。您需要先安装iconv包。

        fs = require('fs')
        fs.readFile('printed_document.txt', function (err,data) {
            if (err) {
                return console.log(err);
            }
            console.log(require('iconv').Iconv('windows-1251', 'utf-8').convert(data).toString())
        })