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