lib/irb.rb in irb-1.3.5 vs lib/irb.rb in irb-1.3.6
- old
+ new
@@ -588,13 +588,19 @@
exc = nil
end
end
end
- def convert_invalid_byte_sequence(str)
- str = str.force_encoding(Encoding::ASCII_8BIT)
- conv = Encoding::Converter.new(Encoding::ASCII_8BIT, Encoding::UTF_8)
+ def convert_invalid_byte_sequence(str, enc)
+ str.force_encoding(enc)
+ str.scrub { |c|
+ c.bytes.map{ |b| "\\x#{b.to_s(16).upcase}" }.join
+ }
+ end
+
+ def encode_with_invalid_byte_sequence(str, enc)
+ conv = Encoding::Converter.new(str.encoding, enc)
dst = String.new
begin
ret = conv.primitive_convert(str, dst)
case ret
when :invalid_byte_sequence
@@ -638,10 +644,11 @@
end
else # '3.0.0' <= RUBY_VERSION
message = exc.full_message(order: :top)
order = :top
end
- message = convert_invalid_byte_sequence(message)
+ message = convert_invalid_byte_sequence(message, exc.message.encoding)
+ message = encode_with_invalid_byte_sequence(message, IRB.conf[:LC_MESSAGES].encoding) unless message.encoding.to_s.casecmp?(IRB.conf[:LC_MESSAGES].encoding.to_s)
message = message.gsub(/((?:^\t.+$\n)+)/) { |m|
case order
when :top
lines = m.split("\n")
when :bottom