精华
Node.js 处理 GBK 编码模板
字符串基本原则
如果你需要对非 UTF8 编码的文本进行处理,如 GBK 编码的,那么我们只有遵循以下原则处理就ok:
fs.readFile(filepath, cb)
=> GBK encoding Buffer
=> iconv decode gbk
=> utf8 js String
=> 处理String
=> iconv encode gbk
=> GBK encoding Buffer
=> send to client
如果你只需要将 GBK 编码的文本直接输出,那么就不需要转换,直接将 GBK 编码的 Buffer 输出即可.
res.send(gbkBuffer);
示例
将 GBK 模板文件进行简单处理,能按 UTF8 和 GBK 两种编码选择输出.
var connect = require('connect');
var fs = require('fs');
var path = require('path');
var iconv = require('iconv-lite');
var app = connect();
var filepath = path.join(__dirname, 'index.html');
var content = fs.readFileSync(filepath);
app.use(function (req, res) {
var s = iconv.decode(content, 'gbk');
if (req.url === '/utf8') {
res.setHeader('Content-Type', 'text/html; charset=utf8');
s = s.replace('<title>淘宝网 - 淘!我喜欢</title>', '<title>淘宝网 - 淘!我喜欢 UTF8</title>')
.replace('<meta charset="gbk">', '<meta charset="utf8">')
.replace('你好啊', '你好啊 UTF8');
// show utf8 page
return res.end(s);
}
// show gbk page
res.setHeader('Content-Type', 'text/html; charset=gbk');
s = s.replace('<title>淘宝网 - 淘!我喜欢</title>', '<title>淘宝网 - 淘!我喜欢 GBK</title>')
.replace('你好啊', '你好啊 GBK');
res.end(iconv.encode(s, 'gbk'));
});
app.listen(1984);
有爱
希望本文对你有用.
http://fengmk2.github.io/blog/2014/iconv-lite/iconv-lite.html
1 回复
good! 处理任何非 UTF-8 的编码,关键都是在 出 和 入 的时候转换一下编码。