「Ruby 1.9 を語る」 by まつもとゆきひろ

http://mono.kmc.gr.jp/~yhara/d/?date=20071215#p03

String
* String#eachが廃止された。つまり、String自身はもうEnumerableではない。
* なぜか?
o String#eachは、何について繰り返すべきか自明でない(行?文字?バイト?)
o 1.9では、明示的にいずれかを選んでもらうようにした
+ str.lines.each (or each_line)
+ str.chars.each (or each_char)
+ str.bytes.each (or each_byte)
* str.each とかしてるプログラムはほとんどないので影響は少ないと思う
M17N, Unicode
* 文字列をバイトベースではなく、文字ベースで扱うようにした
o それぞれの文字はエンコーディングに対応
"ABCあいう"[0] #=> ?A(数値)から"A"(文字列)に
"あ"[0] #=> "あ"
"ABCあいう"[3,1] #=> "あ"
* エンコーディングの指定
o # -* coding: UTF-8 -*- というコメントを先頭に入れるとRuby(とかEmacsとか)がそれ以下をUTF8として扱う
o Windowsな人なら # -* coding: shift-jis -*- とか
o 日本語の変数名も使える :-)
+ けどその場合、UTF-8の"太郎"とShift-JISの"太郎"は別モノとして扱われるので、ソースコードエンコーディングはそろえておきましょう(笑)
o openもエンコーディングに対応
+ open(path, "r:EUC-JP"){|f| f.read} #デフォルトは、Rubyスクリプトソースコードと同じ
+ こうするとEUC-JPの文字列を得る (RubyスクリプトUTF-8だからといって、それに自動的に変換されたりはしない)