utf-8数据怎么以汉字形式保存到txt文件中?

用nodeJS配合


爬网页数据。
原始数据是gb2312编码,在网上找了包superagent-charset将gb2312转成了utf8格式,结果保存在了txt文件里,后续想内容写到moongo里。

简化代码如下:

var superagent = require('superagent');
var charset = require('superagent-charset');
var cheerio = require('cheerio');

var fs = require('fs');
var request = require("request");
var pageUrl = [];

charset(superagent);

for (var i = 1; i < 100; i++) {
    pageUrl.push(baseUrl + i);
}

function start() {
    pageUrl.forEach((url, index) => {
        superagent.get(url).charset('gb2312').end((err, res) => {
            console.log(url);
            if (err) {
                console.log('error');
            } else if (res) {
                var $ = cheerio.load(res.text);
                var body = $('body');
                fs.appendFile('./result.txt', body);
            }
        });
    });
}
start();

发现汉字以utf-8编码的形式保存在result.txt文件里。前端一只,还不懂Node,有2个问题求助。
1:有办法将utf-8编码转成汉字保存在result.txt里吗?
2:清洗后的数据打算放到mongo里,是将中文以utf-8编码形式保存到数据好呢,还是转成中文后保存到数据库中好呢?

————————————————————————分割线————————————————————

问题已经解决。关键步骤:
1:先将gb2312转成utf-8,用superagent-charset解决。
2:查看 cheerio,发现参数: {decodeEntities: false},可以原文保存。

阅读 5.8k
2 个回答

你说的是unicode字符码还是utf-8字符码。
如果是unicode字符码,就是类似于:

\u6c49\u5b57

这种样子的就直接存吧。
但是如果是

&#x6C49;&#x5B57;

这样的字符码,那你还是转成汉字存储吧。

具体的编码问题可以看看这个链接:
https://www.zhihu.com/questio...

因为js只有一种字符串类型。这个类型是UCS-2/UTF-16的,只有用Blob或Buffer才能真正保存UTF-8编码的数据。所以你通过网页爬虫读取到的GB2312数据应该直接转换为js内部字符串,然后利用fs的API保存时指定上utf-8编码。这样对应的模块在保存时进行转换。
如果你想自己转换,那么结果只能放在Buffer里,再写文件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏