バリケンのRuby日記 RSSフィード

2007-12-28

[] Ruby 1.9.0 のirbコマンドの文字コード指定、の補足  Ruby 1.9.0 のirbコマンドの文字コード指定、の補足 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Ruby 1.9.0 のirbコマンドの文字コード指定、の補足 - バリケンのRuby日記  Ruby 1.9.0 のirbコマンドの文字コード指定、の補足 - バリケンのRuby日記 のブックマークコメント

昨日のバッドノウハウ的解決方法だけど、Windows Server 2003上のコマンドプロンプトで試したときはうまく行ったのに、Windows XPのコマンドプロンプトだとダメみたい。

C:\ruby-1.9.0\bin>irb
irb(main):001:0> p 'こんにちは'
"\x82\xB1\x82\xF1\x82\xC9\x82\xBF\x82\xCD"
=> "\x82\xB1\x82\xF1\x82\xC9\x82\xBF\x82\xCD"
irb(main):002:0> p 'こんにちは'.encoding
#<Encoding:ASCII-8BIT>
=> #<Encoding:ASCII-8BIT>
irb(main):003:0>

なんでだろ?Encoding.default_externalを見てみよう。

irb(main):003:0> p Encoding.default_external
#<Encoding:Shift_JIS>
=> #<Encoding:Shift_JIS>
irb(main):004:0>

あれ、ちゃんとうまくいっているはずなのになあ。-Ksをつける前のirbだと、

C:\ruby-1.9.0\bin>irb
irb(main):001:0> p Encoding.default_external
#<Encoding:ASCII-8BIT>
=> #<Encoding:ASCII-8BIT>
irb(main):002:0>

だったから、ちゃんと-Ksオプションは効いてるみたいなんだけどねえ。

もういっかいirb.batを-Ksオプションありに修正して、irbをもういちど起動してみるよ。

C:\ruby-1.9.0\bin>irb
irb(main):001:0> p Encoding.default_external
#<Encoding:Shift_JIS>
=> #<Encoding:Shift_JIS>
irb(main):002:0> p 'こんにちは'.encoding
#<Encoding:ASCII-8BIT>
=> #<Encoding:ASCII-8BIT>
irb(main):003:0> require 'kconv'
=> true
irb(main):004:0> p 'こんにちは'.tosjis.encoding
#<Encoding:Shift_JIS>
=> #<Encoding:Shift_JIS>
irb(main):005:0>

うーん、謎は深まるばかり。

そういえば、Windows Server 2003のほうはVisual Studio 2008 Express Editionを使って自分でコンパイルしたRuby 1.9.0を使っていたんだったよ。そしてWindows XPのほうはこちらでダウンロードしたものを使っていたんだったね。

なにかコンパイルオプションが違うのかな?あと、Windows XPのほうにはRuby 1.8もインストールされているから、それが何か影響しているのかも。

ためしにPATHを無効にしてみると、どうなるかな?

C:\ruby-1.9.0\bin>set PATH=

C:\ruby-1.9.0\bin>irb
irb(main):001:0> 

ありゃ、こんどはこんなエラーが出ちゃった。

f:id:muscovyduck:20071228070321p:image

でも、エラーは出てるけどirbは動いているみたい。じゃあ、ためしてみよう!

C:\ruby-1.9.0\bin>irb
irb(main):001:0> p 'こんにちは'
"こんにちは"
=> "こんにちは"
irb(main):002:0> p 'こんにちは'.encoding
#<Encoding:Shift_JIS>
=> #<Encoding:Shift_JIS>
irb(main):003:0>

今度はうまくいったよ!どうやらRuby1.8同梱のreadline.dllと相性が悪いみたい。というわけで、

irb --noreadline

で起動すればうまくいくみたいだよ。

なので結論としては、最初にインストールしたirb.batの

"%~d0~p0ruby" -x "%~f0" %*

となっている部分を

"%~d0%~p0ruby" -Ks -x "%~f0" --noreadline %*

と修正すれば、以後は普通にirbと打てば問題ないみたい。

[] Ruby 1.9.0 のgemを使ってみる  Ruby 1.9.0 のgemを使ってみる - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Ruby 1.9.0 のgemを使ってみる - バリケンのRuby日記  Ruby 1.9.0 のgemを使ってみる - バリケンのRuby日記 のブックマークコメント

スラッシュドットジャパンRuby 1.9.0 リリースという記事に、参考になるコメントが!

上記のコメント通りにzlib.dllの導入とrbconfig.rbの編集を行ったら、無事gemコマンドが使えるようになったみたい。

C:\ruby-1.9.0\bin>gem -v
1.0.1

C:\ruby-1.9.0\bin>gem install rails
Successfully installed activesupport-2.0.2
Successfully installed activerecord-2.0.2
Successfully installed actionpack-2.0.2
Successfully installed actionmailer-2.0.2
Successfully installed activeresource-2.0.2
Successfully installed rails-2.0.2
6 gems installed
Installing ri documentation for activesupport-2.0.2...
Installing ri documentation for activerecord-2.0.2...
Installing ri documentation for actionpack-2.0.2...
Installing ri documentation for actionmailer-2.0.2...
Installing ri documentation for activeresource-2.0.2...
Installing RDoc documentation for activesupport-2.0.2...
Installing RDoc documentation for activerecord-2.0.2...
Installing RDoc documentation for actionpack-2.0.2...
Installing RDoc documentation for actionmailer-2.0.2...
Installing RDoc documentation for activeresource-2.0.2...

C:\ruby-1.9.0\bin>rails -v
Rails 2.0.2

C:\ruby-1.9.0\bin>

でも残念ながら、インストールしたRailsは動かなかったよ。

C:\ruby-1.9.0\bin>rails testprj
can't convert Enumerable::Enumerator into Array

C:\ruby-1.9.0\bin>

こんな感じで、しばらくは他のライブラリも動作は期待できないかも。

[] Ruby 1.9.0でRSSライブラリを使ってみる  Ruby 1.9.0でRSSライブラリを使ってみる - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Ruby 1.9.0でRSSライブラリを使ってみる - バリケンのRuby日記  Ruby 1.9.0でRSSライブラリを使ってみる - バリケンのRuby日記 のブックマークコメント

というわけで、gemでインストールするライブラリはしばらくは動作が期待できないから、標準ライブラリでできることをやってみるよ。まずはRSSライブラリを使ってコードを書いてみるよ(Windows版)。

あんまりRuby 1.9っぽいコードじゃないけど、とりあえず「はてなブックマークの最近の注目エントリを5件表示するスクリプト」を作ってみたよ。

# -* coding: Shift_JIS -*-

ENTRIES = 5

require 'uri'
require 'open-uri'
require 'rss'

uri = URI.parse('http://b.hatena.ne.jp/entrylist?mode=rss&sort=hot&threshold=3')
rss = RSS::Parser.parse(uri.read)
rss.output_encoding = 'Shift_JIS'

bookmarks = []

rss.items.each do |i|
  bookmarks.push([i.title, i.link])
end

puts "■はてなブックマーク 最近の注目エントリ #{ENTRIES}件"
puts
puts bookmarks[0, ENTRIES].map {|i| i.join("\n") }.join("\n\n")

実行結果だよ。

C:\ruby-1.9.0\bin>ruby hateb.rb
■はてなブックマーク 最近の注目エントリ 5件

構造化Wiki記法エンジン WikiForme 0.6 + Pressmate リリース! - 古橋貞之の日記
http://d.hatena.ne.jp/viver/20071225/p1

死生観と医療崩壊 - NATROMの日記
http://d.hatena.ne.jp/NATROM/20071228#p1

ブット元首相の暗殺でアルカイダが犯行声明、パキスタンのテレビが報じる 国際ニュース : AFPBB News
http://www.afpbb.com/article/war-unrest/2330452/2480890

404 Blog Not Found:大学ってもこれだけある - 書評 - ニッポンの大学
http://blog.livedoor.jp/dankogai/archives/50975696.html

Flickr: Photos from juriu
http://www.flickr.com/photos/juriu/

C:\ruby-1.9.0\bin>
トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20071228