6

javascript で文字列を CP932 (別名 Windows-31J) から utf8 に変換しようとしています。基本的に、リクエストヘッダーのutf-8リクエストを無視し、cp932でエンコードされたテキストを返すサイトをクロールしています(htmlメタタグはページがshift_jisであることを示していますが)。

とにかく、ページ全体を「html」という文字列変数に保存しています。そこから、次のコードを使用して utf8 に変換しようとしています:

var Iconv = require('iconv').Iconv;
var conv = new Iconv('CP932', 'UTF-8//TRANSLIT//IGNORE');

var myBuffer = new Buffer(html.length * 3);
myBuffer.write(html, 0, 'utf8')
var utf8html = (conv.convert(myBuffer)).toString('utf8');

結果は本来あるべきものではありません。たとえば、「投稿者さんの稚内全日空ホテルのレビュー (感想・情報)」という文字列は、「ソスストソスメゑソスソスススソススストストスソスススソススススソススzソスセンスススフフクソス`」となります。っす~(すすんすずすえすすすすすす)」

//TRANSLIT//IGNORE を削除すると (欠落している文字に対して同様の文字が返され、トランスコードできない文字が省略されます)、次のエラーが発生します: エラー: EILSEQ、不正な文字シーケンス。

私は nodejs で実装できる任意のソリューションを使用することにオープンですが、私の検索結果には nodejs-iconv モジュール以外の多くのオプションはありませんでした。

nodejs-iconv 参照: https://github.com/bnoordhuis/node-iconv

ありがとう!

編集 24.06.2011: 私は先に進み、Java でソリューションを実装しました。ただし、誰かがこの問題を解決できる場合は、この問題に対する JavaScript の解決策にまだ興味があります。

4

3 に答える 3

5

今日も同じ問題が発生しました:)
libiconvに依存します。libiconv-1.13-ja-1.patch が必要です。
以下をご確認ください。

または、iconv-jp try を使用して問題を回避できます

npm install iconv-jp
于 2011-08-28T11:30:44.320 に答える
5

CP1250でも同じ問題がありました。どこでも問題を探していましたが、リクエストの呼び出しを除いてすべて問題ありませんでした。追加する必要がありましたencoding: 'binary'

request = require('request')
Iconv  = require('iconv').Iconv

request({uri: url, encoding: 'binary'}, function(err, response, body) {
    body = new Buffer(body, 'binary')
    iconv = new Iconv('CP1250', 'UTF8')
    body = iconv.convert(body).toString()
    // ...
})
于 2013-01-10T10:26:11.103 に答える
0

https://github.com/bnoordhuis/node-iconv/issues/19

/Users/Me/node_modules/iconv/test.jsノードtest.jsを試しました。エラーを返します。

Mac OS X Lionでは、この問題はgccに依存しているようです。

于 2011-09-02T01:53:07.183 に答える