0

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

感谢专家的帮助。

谢谢,

戴夫

4

1 回答 1

0

我设法做到了。经验教训:始终了解您处理的数据。不仅格式/结构,而且字符编码也非常重要。

主要问题是字符作为 ISO-8859-1 发送,但我不知道。一旦我发现我将所有内容都转换为 UTF8,数据库和我自己的所有 API 端点都可以提供服务。

我将调用更改为使用请求节点包,将其作为二进制文件拉下并使用 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();
        }
    }
);

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

于 2013-06-24T14:59:00.840 回答