使用Node处理来自外部API服务的值时遇到一些问题。
http.get(
endpoint,
function(res)
{
if (res.statusCode != 200)
{
return next();
}
var pageData = '';
res.setEncoding('utf8');
res.on(
'data',
function(chunk)
{
pageData += chunk;
}
);
res.on(
'end',
function()
{
waterfallCallback(null, pageData);
}
);
}
);
然后我用xml2js解析器反序列化字符串并相应地使用数据。我的一些字符串中有外来字符即。 Ciné当他们被保存到数据库时,他们没有正确记录。
我尝试使用iconv包从utf-8转换为ISO-8859-1,但我不确定这是否是处理情况的正确方法。
感谢专家的帮助。
谢谢,
戴夫
答案 0 :(得分:0)
我成功了。获得的经验教训:始终了解您处理的数据。不仅仅是格式/结构,而且字符编码绝对至关重要。
主要问题是角色是作为ISO-8859-1发送的,但我不知道。一旦我发现了,我将所有内容都转换为UTF8,数据库和我自己的所有API端点都用于UTF8。
我改变了我的调用以使用请求节点包,将其作为二进制文件拉下来并使用iconv转换为UTF8。这是一些有用的代码:
request(
{
uri: 'http://' + endpoint.host + endpoint.path,
encoding: null
},
function(err, response, body)
{
if (! err && response.statusCode == 200)
{
var iconv = new icon('ISO-8859-1', 'UTF8');
var converted = iconv.convert(body);
callback(
null,
converted.toString('utf8')
);
}
else
{
next();
}
}
);
现在返回的结果正是我所期待的。 =)