问题
虽然现在网站开发都用utf-8文件编码格式了,但是难免有些项目要用gbk编码格式,然后我们用gulp做工作流工具的话,它只能生成utf-8文件,那么怎么转换成gbk文件呢?
思路
其实解题思路跟gulp关系不大,需要用到两个方法:fs.readFile和fs.writeFile,以及一个包:iconv-lite。
你可能会先gulp.pipe()一连串操作,在最后加上一个.on('end',func)来监听最后一个操作的完成,通常最后一个操作的完成就意味着dest,然后我们拿到这个dest的utf-8文件,先读取文件内容然后转码,然后写入,即可。
代码
function compileJs() {
gulp.src(projectPath.source.js + '**')
.pipe(gulp.dest(projectPath.dist.js))
.on('end', function () {
fs.readFile('public/static/js/individualworks/subjectstarter.js', 'utf-8', function (err, data) {
var gbkCode = new Buffer(iconv.encode(data, 'gbk'));
fs.writeFile('public/static/js/individualworks/subjectstarter_gbk.js', gbkCode, function (err) {
if (err) {
return;
}
console.log('gbk文件成功生成');
});
});
});
}
可以看到我为了最简单举例,除了dest了一下js文件,没有做其他的操作。等dest完成后,我开始读文件,按照'utf-8'读,之后转换成gbk,然后生成buffer对象,再把这个buffer对象写入_gbk.js文件即可,就这么简单。
小问题
这样生成的_gbk.js文件,用Sublime Text打开会默认用utf-8模式打开,即使你装了gbk插件。可能是跟文件头有关系。用记事本打开是正常的。
其实这个文件根本没必要打开,直接用就可以了。