关于iconv-lite转换编码的问题.将utf8转为gb2312
发布于 7 年前 作者 caihuattkl 6761 次浏览 来自 问答

我的需求是这样的:我想根据一些txt文本文件(所有txt文件都是utf8编码),和html模板文件(GB2312编码)批量生成网站,最终生成出来的就是html静态文件,且是gb2312编码的。现在的问题就是我生成出来的html文件是乱码的.不知道哪里转错误了…希望各位老师指点啊!!测试了一个上午.没效果!!!

var fs = require(“fs”), http = require(“http”), _url = require(‘url’), toEn = require(’./models/toPinyin’), newsTime = require(’./models/newsTime’), iconv = require(‘iconv-lite’);

//获取内容 function readFilesTpl(ArrKeywordsDetail) { //读取模板 var tpl, data, html; tpl = iconv.encode(fs.readFileSync(‘tpl.html’), ‘GB2312’); data = iconv.encode(fs.readFileSync(“markHtmlCore/content.txt”),‘GB2312’);

html = tpl.toString().replace(/{{content}}/, data.toString())
.replace(/{{title}}/, ArrKeywordsDetail)
.replace(/{{keywords}}/, ArrKeywordsDetail)
.replace(/{{description}}/, ArrKeywordsDetail) //description
.replace(/{{time}}/, newsTime); //description
return html;

}

//获取关键词 function readFilesKey() { var data = fs.readFileSync(“markHtmlCore/keywords.txt”, “utf-8”); return data.split(’\r\n’); }

//生成html function writeFiles(ArrKeywords) { this.ArrKeywords = ArrKeywords || [];

var p = Math.floor(Math.random() * (12 - 4) + 4) //随机段落
for(var i = 0; i < this.ArrKeywords.length; i++) {
	fs.writeFileSync('html/' + toEn(this.ArrKeywords[i]) + (i + 1) + '.html', iconv.decode(readFilesTpl(this.ArrKeywords[i]),'GB2312'))
	console.log('生成' + this.ArrKeywords[i] + "成功!");
}

}

http.createServer(function(req, res) { console.log(req.url) writeFiles(readFilesKey())

}).listen(3356, ‘127.0.0.1’); console.log(“Server running”)

10 回复

这样做

  1. 读 utf8 txt fs.readFileSync(txt, 'utf8')
  2. 读 html, 不指定 encoding, 读出 buffer, 通过 iconv 转成 string
  3. 生成 html string
  4. 通过 iconv 转成 gb2312 编码的 buffer, 写入

楼上说的对 楼主要是懒得把楼上说的实现了的话,楼主贴几个txt出来,贴个模板出来,给点搬砖钱我给你写了。

@magicdawn 通过 iconv 转成 gb2312 编码的 buffer, 写入 这句话如何写? 不是什么明白啊

@magicdawn 现在用记事本打开显示正常了.但是浏览器打开访问乱码.我要疯了!!!5555

@magicdawn 朋友,我将源码放到git上面了 markhtml分支.能帮我看看代码哪里出问题了吗??? https://github.com/caihuattkl/blog/tree/markhtml

有朋友主动看看嘛?

绑定绑定<p><br/><br/>来自mov1er的cnode!</p>

@jiangzhuo 我有个疑问,如果我不改html的编码,我要怎么处理才不会乱码呢?

@jiangzhuo 非常详细,我想我已经明白了!!!多谢多谢!朋友!

回到顶部