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 パーサーを使用して文字列を逆シリアル化し、それに応じてデータを使用します。私の文字列のいくつかには、外国の文字が含まれています。シネがデータベースに保存されると、正しく記録されません。

iconv パッケージを使用して utf-8 から ISO-8859-1 に変換しようとしましたが、これが状況を処理する正しい方法であるかどうかはわかりません。

専門家による支援を歓迎します。

ありがとう、

デイブ

4

1 に答える 1

0

私はこれをうまくやることができました。教訓:扱うデータを常に理解する。形式/構造だけでなく、文字エンコーディングも絶対に重要です。

主な問題は、文字が ISO-8859-1 として送信されていたことですが、私にはわかりませんでした。それがわかったら、データベースとすべての独自の API エンドポイントが提供するすべてを UTF8 に変換しました。

request ノード パッケージを使用するように呼び出しを変更し、それをバイナリとしてプルダウンし、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 に答える