我在 latin1 中有一个数据库,我想将其查询转换为 的 UTF-8
示例:
response.write 返回此JSON:
{"questions":[{"question":"Nação","answer":"PaÃs"}]}
但我需要将它转换为utf8:
{"questions":[{"question":"Nação","answer":"País"}]}
conexao_bd.getConnection(function(err,con){
if(err) return console.log("Erro na conexao. "+err);
con.query("SELECT question, answer FROM "+tipo+" WHERE id IN "+c,function(err, rows){
if(err) console.log("Erro na query questions: "+err);
else{
for(var k =0;k<rows.length;k++)
perguntas.questions[k]={'question': rows[k].question,'answer':rows[k].answer};
console.log(JSON.stringify(perguntas));
con.release();
response.writeHeader(200, {"Content-Type": "text/plain"});
response.write(JSON.stringify(perguntas));
response.end();
}
});
});
答案 0 :(得分:3)
您需要一个额外的模块来转换不同的字符串编码。 node-iconv似乎是你正在寻找的!它也是由libuv / node的核心开发人员创建的,所以它应该是可持续的。但是,如果可能的话,请考虑更新数据库上的编码,因为这可能是最持久的解决方案。
PS:对于node-mysql,也应该可以直接将传入的数据传输到编码流(可能无法工作,但你明白了):
var mysql = require('mysql');
var iconv = require('iconv');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret'
});
connection.connect();
var query = connection.query('SELECT 1 + 1 AS solution')
var encoder = new iconv.Iconv('latin1', 'utf-8');
// will encode result and pipe it to your terminal
query.pipe(encoder.pipe(process.stdout));
修改强>: 如果更新数据库不是一个选项,Thomas提出了在node-mysql中设置charset的好建议。这也似乎有可能见here,并且应该比我的黑客更好。但是,如果您不使用node-mysql,这可能是一种解决方法。
答案 1 :(得分:3)
重新编码@bodokaiser发布的字符串也是一种可能,但它不是一个干净的系统解决方案。干净的解决方案是告诉数据库给你utf-8 。这可以通过两种方式完成:
set names utf8
设置连接字符集。