Closed
Description
概要
UTF-16LEな文字列から生成したStringIOで、getsが正しく動きません。
再現手順
require 'stringio'
str = "line1\nline2\nline3\n".encode("utf-16le")
sio = StringIO.new(str)
p sio.gets
p sio.gets
p sio.getbyte
p sio.gets
結果
"line1\x0A"
"\u6C00\u6900\u6E00\u6500\u3200\u0A00"
0
"line3\x0A"
1行目は改行を表すバイト列 \x0A \x00 の内、1バイト目までが読み込まれています。
2行目は前の行の残った \x00 から読まれるので、壊れた文字列になります。
3行目で余計な \x00 を読み飛ばすとそれ以降は改行の手前までは正しく読まれます。
Metadata
Metadata
Assignees
Labels
No labels