Home > ruby > Ruby 1.9で文字コードの自動判別を行う

Ruby 1.9で文字コードの自動判別を行う

 たまにRubyの話題でも。

 Ruby 1.9で文字コードの自動判別をさせようとおもったら、意外に良いライブラリが見つからなくて苦労しました。
結局ICUをbindingした、charlock_holmesがちゃんと使えたので、メモです。

 OSXで使う場合は、下記の様にしてICUライブラリをインストールします。Linuxでは適当なパッケージシステムを使ってインストールしてください。

curl -O http://download.icu-project.org/files/icu4c/4.8.1.1/icu4c-4_8_1_1-src.tgz
tar xvzf icu4c-4_8_1_1-src.tgz
cd icu/source
./runConfigureICU MacOSX --with-library-bits=64 --disable-samples --enable-static
make
sudo make install

 charlock_holmes自体はgemで提供されています。

gem install charlock_holmes

 文字列をUTF-8に変換する場合は、iconvと組み合わせて下記の様に書きます。

encode = CharlockHolmes::EncodingDetector.detect(str)[:encoding]
str.encode("UTF-8", encode)

【変更 2012/1/6 19:37】
コメントを頂いたので、iconvからString#encodeに切り換えました。

【変更 2012/1/6 18:52】
ICUのバージョンを4.8.1.1に上げました。

Related posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社PingKingやニフティ社アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立、iPhoneアプリなどの開発を行う。2009年11月に退社し、現在、米Appcelerator社のテクニカルエバンジェリスト。
Twitterは、@masuidrive

Comments:3

G 12-01-06 (Fri) 0:42

他のライブラリに言及が無いので試したかわかりませんが、
chardet / rchardet とか、どうでしょう。
http://rubyforge.org/projects/rchardet

mrkn 12-01-06 (Fri) 2:10

iconv はオワコンなので、エンコーディングの変換には String#encode を使ってください。

masuidrive 12-01-06 (Fri) 3:44

>>G
rchardetは、うちの1.9.2でうまく動かなかったんですよ。

>>mrkn
ありがとうございます。修正しました。
Twでmatzにもつっこまれましたw

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.masuidrive.jp/index.php/2012/01/06/encoding-auto-detection-on-ruby-1-9/trackback/
Listed below are links to weblogs that reference
Ruby 1.9で文字コードの自動判別を行う from @masuidrive blog

Home > ruby > Ruby 1.9で文字コードの自動判別を行う

Search
Feeds
Meta

Return to page top