因为历史的原因,论坛还是用了 GBK 的编码,因此全套的程序需要做 UTF-8 的转换。

为了方便批量转换源代码,写了下面的 Node.js 脚本,可以批量对 Discuz、UCenter 等PHP程序转换 UTF-8

使用前请 npm install iconv-lite 来安装依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const iconv = require('iconv-lite');
const fs = require('fs');
const Path = require('path');

const INPUT_ROOT = './wwwroot'; // 等待转换的文件夹
const OUTPUT_ROOT = './dist/'; // 输出到哪个文件夹

if (!fs.existsSync(OUTPUT_ROOT)) {
fs.mkdirSync(OUTPUT_ROOT);
}

// 以下的格式将会转换编码
const FORMATS = ['.htm', '.php', '.js', '.txt', '.html', '.css', '.xml', '.json'];

tree(INPUT_ROOT);

function tree(dir) {
fs.mkdirSync(OUTPUT_ROOT + dir);
fs.readdirSync(dir).forEach(v => {
const path = dir + '/' + v;
const stat = fs.statSync(path);
if (stat.isDirectory()) {
tree(path);
} else {
const format = Path.extname(v);
if (FORMATS.indexOf(format) === -1) {
fs.copyFileSync(path, OUTPUT_ROOT + path);
return;
}

fs.createReadStream(path)
.pipe(iconv.decodeStream('gbk'))
.pipe(iconv.encodeStream('utf8'))
.pipe(fs.createWriteStream(OUTPUT_ROOT + path));

console.log(path);
}
});
}

除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

本文地址:https://blog.micblo.com/2019/04/30/%E5%A4%9A%E6%96%87%E4%BB%B6-GBK-%E6%89%B9%E9%87%8F%E8%BD%AC%E6%8D%A2-UTF-8/