在API响应中解码字符的问题

时间:2013-06-23 20:56:53

标签: javascript node.js encoding

使用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,但我不确定这是否是处理情况的正确方法。

感谢专家的帮助。

谢谢,

戴夫

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();
        }
    }
);

现在返回的结果正是我所期待的。 =)