精华 Node.js 处理 GBK 编码模板
发布于 1年前 作者 fengmk2 1301 次浏览 最后一次编辑是 4个月前 来自 分享

字符串基本原则

如果你需要对非 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 两种编码选择输出.

[[[[[[[[[[[[[@see](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see)](/user/see) app.js

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 的编码,关键都是在 出 和 入 的时候转换一下编码。

回到顶部