登录
注册
node.js 学习社区
nodejs解决中文字符浏览器不兼容(乱码)的终极办法(punycode)

若依

2014-12-11 03:14

最近,为做一个浏览器插件,被字符不兼容的问题快搞死了。具体问题是从浏览器插件发起ajax跨域请求服务端内容,response的内容编辑是utf-8,在Firefox和Chrome下返回的结果都没有问题,但IE下中文是乱码.
这个问题实在太诡异。想尽一切办法最后最终找到以下解决途径:
首先用punycode.ucs2.decode方法将unicode string转为decimal code points,结果是一个数字数组。

var punycode = require('punycode');
app.get('/translate/:text/:from/:to', function(req, res){
    var translate = require('./translate.js');
    var text = req.params.text;
    var from = req.params.from;
    var to = req.params.to;
    res.charset = 'utf-8';
    translate.translate(text,from,to,function(err, data){
        res.send(punycode.ucs2.decode(data));
    });
});

这是最核心的一句:punycode.ucs2.decode(data)
然后在客户端将这个数组遍历,每个数字前加&#,后面加;,将其转为html字符实体:

function ParseChar(char){
    var result = '';
    for (i = 0; i < char.length; i++) {
        result += '' + char[i].toString() + ';';
    }
    return result;
}

这样得到的结果,就在任何浏览器下中文都不会有乱码了。

原文引自:http://cnodejs.org/topic/519f24bb776b2e7f030e1b2d

回复 · 0

发表回复

你可以在回复中 @ 其他人