Project

General

Profile

Actions

Bug #10285

closed

StringIO with encodings broken due to #9769

Added by dbussink (Dirkjan Bussink) about 10 years ago. Updated about 10 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
2.1.3
[ruby-core:65240]

Description

It looks like the change in https://bugs.ruby-lang.org/issues/9769 resulted in a behavior change with how StringIO works with different encodings.

The following snippet is broken and now raises:

test_string_io_encoding.rb:8:in `write': incompatible character encodings: ASCII-8BIT and Windows-1252 (Encoding::CompatibilityError)
	from test_string_io_encoding.rb:8:in `<main>'
require 'stringio'

io = StringIO.new
io.set_encoding(Encoding::ASCII_8BIT)
io.write("quz \x83 mat".force_encoding(Encoding::ASCII_8BIT))

str = "foo \x97 bar".force_encoding(Encoding::WINDOWS_1252)
io.write(str)

p io.string

What is the intended behavior here? If I change the code to not set the encoding on the StringIO object, it does work somehow:

require 'stringio'

io = StringIO.new
io.write("quz \x83 mat".force_encoding(Encoding::ASCII_8BIT))

str = "foo \x97 bar".force_encoding(Encoding::WINDOWS_1252)
io.write(str)

p io.string

In this case it sees io.string as UTF-8 encoded, but this is invalid. It does allow the second StringIO#write here though.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0