iconv-jp

1,456 views
Skip to first unread message

mash180sx

unread,
Jul 4, 2012, 4:43:22 AM7/4/12
to node...@googlegroups.com
いつもお世話になっております。
初めて投稿させていただきますが宜しくお願い致します。

早速ですが、node.jsにて日本語ページ(Windows-31Jのページ)をスクレイピングをしようとしていて
iconv-jpを使用しています。
少し前まではnpmで普通にダウンロードして使用出来ていたんですが、
node.jsのバージョンアップに伴なって恐らくnode-wafが使用不可になった関係で
npmをした際に、node-wafでエラーが出るようになってしまいました。
自分でnode-gypの勉強をして対応できないものかといろいろ試行錯誤してみたのですが
現時点ではお手上げ状態で、余りに時間が掛かりすぎるのでお助けいただきたく投稿させていただきました。

一番良いのは大元のnode-iconvにパッチを充ててもらえれば良いのでしょうが、
libiconvの最新パッチが出ていないようだし、
node-iconvに直接パッチを当てる件のスレが立っているようですが途中で止まってしまっているようです。

お手数をお掛けしますが、宜しくお願い致します。

Kazuyuki Honda

unread,
Jul 4, 2012, 5:40:26 AM7/4/12
to node...@googlegroups.com
本多@hakobera です。

本家 node-iconv が gyp でのビルドに対応しているので、
そこに patch を当てて、自分でビルドすれば良いのではないでしょうか?

実際に使ったことはないので動作保証はしかねますが、
とりあえず以下の方法で Node v0.8.0 でビルドはできました。

1. 本家 node-iconv を clone


2. libiconv 1.14 用の日本語パッチをダウンロード


$ cd node-iconv
$ cd deps
$ cd libiconv
$ patch -p1 < ../libiconv-1.14-ja-1.patch

3. 必要に応じて node-gyp をインストールして、ビルドを確認

$ cd [node-iconv の root]
$ npm install node-gyp -g
$ node-gyp configure build
$ npm install .

4. 動作確認

$ node test.js

あとはこれをローカルインストールするなりして使えば良いと思います。

せっかくなので、ここまでの作業をしたものを github にあげておきました。
特にメンテナンスする気がないので、消すかもしれませんので、fork するなりして試してみてください。

github からの npm モジュールをインストールする方法は、
Node 学園 6時限目で Jed さんが紹介していた以下の方法でできます。

package.json

{
  "name": "iconv-test",
  "version": "0.1.0",
  "dependencies": {
  }
}

2012年7月4日 17:43 mash180sx <mash...@gmail.com>:

mash180sx

unread,
Jul 4, 2012, 5:53:46 AM7/4/12
to node...@googlegroups.com
早速詳細な解説と、アップまでしていただきありがとうございます。
自分も本家の方がnode-gyp対応されていたので、
そちらを使おうとも思ったのですが、libiconv-1.14の最新パッチがないと思い込んでいました。
以下で解決しそうです。
ありがとうございます!

2012年7月4日水曜日 18時40分26秒 UTC+9 hakobera:

小堤一弘

unread,
Jul 4, 2012, 8:37:42 PM7/4/12
to node...@googlegroups.com
ども、小堤と申します。

おそらく"iconv-jp"ということは、僕が作ったヤツですね・・・。

しばらく放置だったのと、最新版での確認ができてなかったので
つかってくれてる人がいるということで(w
node-gyp対応も、検討したいと思います・・・。

そもそも、node-iconvのiconvソースにパッチを当てただけなので
大した物ではないのですけど・・・。
先にあるように、パッチを当ててコンパイルするだけですので。

もし、node-gyp対応とかすることがありましたら、やり方教えてくださいw

よろしくお願いいたします。


2012年7月4日 17:43 mash180sx <mash...@gmail.com>:
--
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Company : 株式会社ゼノフィ - Xenophy CO., LTD.
Name : 代表取締役社長
小堤 一弘
Address : 東京都新宿区百人町1-17-6 成田ビル 305
Tel/Fax : 03-6805-2904/03-6805-2914
Mail Address : kotsu...@xenophy.com
H.P Address : http://www.xenophy.com/
BLOG Address : http://blog.xenophy.com/
: http://code.xenophy.com/
xFramework : http://px.xFramework.net/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

mash180sx

unread,
Jul 4, 2012, 9:24:48 PM7/4/12
to node...@googlegroups.com
取り敢えず、Windows環境で実施してみたのですが(本番ではLinux環境で使う予定)
以下の手順中、1~3は実施できたのですが(warninngは大量に発生しています)、
4の動作確認にてエラーが出てしまいました(当然、自前のソースでもrequireで問題が発生します)。
ビルドが出来てもやはりWindowsではnode-iconvは動かないのでしょうか?
node-gypでのビルドが可能になってWindowsでもやっとiconvが利用できるのかと思ったのですが、
もし何か打つ手があれば教えていただければと思います(無理なら無理という回答でも構いません)。

>node test.js

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: unknown error
    at Object..node (module.js:472:11)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Module.require (module.js:354:17)
    at require (module.js:370:17)
    at Object.<anonymous> (・・・\node_modules\node-iconv\test.js:4:9)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)

【ビルド環境】
patch : Cygwin GNU Patch
VC++ : VisualStudio C++ 2010 Express
Python : v2.7.2
node.js : v0.6.17

2012年7月4日水曜日 18時40分26秒 UTC+9 hakobera:

TAKANO `takano32' Mitsuhiro

unread,
Jul 5, 2012, 2:36:05 AM7/5/12
to node...@googlegroups.com
takano32 です。

あー。ここらへん、じつは本家にマージしてもらおうと思ったのですが、
時間がとれてないまま放置になっちゃってました。

https://github.com/bnoordhuis/node-iconv/pull/28#issuecomment-5150806

私が npm search したときに iconv のほうかに iconv-jp もあるのは
なんかおかしいな、と思ったのが発端で特に当方で iconv を使う
必要も発生してないのでちゅうぶらりんになってしまいました。

bnoordhuisのコメントの
libiconv 本家にパッチがあたらないのはなんでなの?
といった質問についてちょっと適切に答える調査などもできてないっす。
もし、事情に詳しい方がいらっしゃったらこちらのプルリクエスト、
フォローしていただければ幸いです。申し訳ない。
# fork して squash して出直したほうがいいかも。

2012年7月5日 10:24 mash180sx <mash...@gmail.com>:

hakobera

unread,
Jul 5, 2012, 10:59:21 PM7/5/12
to node...@googlegroups.com
mash180sx さん

本多@hakobera です。

> 取り敢えず、Windows環境で実施してみたのですが(本番ではLinux環境で使う予定)

そもそもパッチに関係なく、本家の node-iconv が Windows で動きませんね。
日本語パッチあてないバージョンを手元の Windows 環境で試してみましたがダメでした。
Node.js v0.6.19 でも、Node.js v0.8.1 でも状況は同じです。

README でも微妙な書かれ方しているので、問題を報告してあげると良いのではないでしょうか。

node-iconv may or may not work on Windows. Please try it and report any issues you have.

他に選択肢がないか探してみて、以下をみつけました。
ただ、こちらは Windows 動きますが、Shift_JIS に対応していないのが残念。
将来的には対応するエンコーディングを増やしたい、ということは書いてあるので、
watch しておくと良いかもしれません。

iconv-lite - Pure JavaScript Character Encoding Conversion

2012年7月5日木曜日 10時24分48秒 UTC+9 mash180sx:

mash180sx

unread,
Jul 6, 2012, 8:23:44 PM7/6/12
to node...@googlegroups.com
本多@hakoberaさん

度々情報をいただきありがとうございました。
あっと言う間にビルドして回答いただけて凄いなぁ、と感嘆しております。
取り敢えず、Linux環境でうまく動かすことができ、大変助かりました!
Windowsで 動かない件ですが、英語が余り得意ではないので、
本家へのコメントは保留ということで・・・(汗)
それから、ブログの情報も良く見させていただいています。
いつも参考になる情報をありがとうございます!
(東京node学園6時限行きたかったです)

小堤さん

iconv-jpはネットで見つけて良く使用していました。
作成者ご本人からコメントいただけて恐縮です。

takano32さん

本家iconvにコメントされていた方からコメントいただけて感謝です。


皆様ありがとうございました。


2012年7月6日金曜日 11時59分21秒 UTC+9 hakobera:

hakobera

unread,
Jul 24, 2012, 10:56:50 AM7/24/12
to node...@googlegroups.com
本多@hakobera です。

もう気がついているかもしれませんが、
本家 node-iconv に Windows 対応の pull request が上がっています。


ローカルで試しましたが、これまで動かなかった test.js は動くようになっています。

上記ページに書いてありますが、NODE_MODULE マクロの問題や、
MSVC が同盟の .c, .cc ファイルを混同してしまう問題は他の add-on にも共通する問題なんじゃないかと思います。
もし Windows で add-on が動かないという方はこの辺、疑って見ると良いのではないでしょうか。

2012年7月7日土曜日 9時23分44秒 UTC+9 mash180sx:
Reply all
Reply to author
Forward
0 new messages