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 の解決策にまだ興味があります。