Bug #3180: getc with text mode breaks incomplete character immediately before EOF
http://redmine.ruby-lang.org/issues/show/3180

起票者: Yusuke Endoh
ステータス: Open, 優先度: Normal
担当者: Yui NARUSE, カテゴリ: M17N, Target version: 1.9.2
ruby -v: ruby 1.9.2dev (2010-04-20 trunk 27405) [i686-linux] 

遠藤です。

  # coding: UTF-8
  # "う" の途中で切れた中途半端なファイルを作る
  s = "あいうえお".force_encoding("ASCII-8BIT")
  open("foo.txt", "wb") {|f| f.write(s[0, 8]) }

  # IO#read で一気に読めば期待通り
  open("foo.txt", "rt") {|f| p f.read } #=> "あい\xE3\x81"

  # UTF-8 を明示すると UTF-8 になるが、最後の文字が化ける
  open("foo.txt", "rt:UTF-8") {|f| p f.chars.to_a }
    #=> ["あ", "い", "\u0000\u0000"]

LANG は ja_JP.UTF-8 です。

incomplete な文字が "\0\0" に化けるのは意図的でしょうか。
期待としては、["あ", "い", "\xE3", "\x81"] です。

-- 
Yusuke Endoh <mame / tsg.ne.jp>


----------------------------------------
http://redmine.ruby-lang.org