09/03/28 21:53:47
今1.9.1覚えようとしてるのですが、文字コードについて分かる方教えてください
参考にしてるテキストは「初めてのRuby」で、
5.5.1で外部エンコーディングについて、
読み書きしようとする外部リソースのエンコーディングであって、
リソースに文字列データを書き込む際には外部エンコーディングに変換されます。
と説明があります。
しかし、実際に異なるエンコーディングで試してみると以下の(2)のように文字化けします。
これは書き方が悪いのでしょうか、それとも仕様でしょうか
#encoding: Shift_JIS
require 'stringio'
p Encoding.default_internal #=> nil
p Encoding.default_external #=> #<Encoding:Windows-31J>
s = gets() # "日本語"を入力
p '1:'+s #=> 1:日本語
p s.encoding #=> #<Encoding:Windows-31J>
e = s.encode('euc-jp')
p '2:'+e #=> 2:(文字化け)
p e.encoding #=> #<Encoding:EUC-JP>
buffer = "".encode('Shift_JIS')
sio = StringIO.new(buffer)
$stdout = sio
puts '3:'+s #=> 3:日本語
puts '4:'+e #=> 4:日本語 (StringIOを経由するとエンコード変換される)
$stdout = STDOUT
puts buffer
OS: Vista
version: ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]