nodejs解决中文字符浏览器不兼容(乱码)的终极办法(punycode)
最近,为做一个浏览器插件,被字符不兼容的问题快搞死了。具体问题是从浏览器插件发起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;
}
这样得到的结果,就在任何浏览器下中文都不会有乱码了。