builtins/encoding_converter/converting.rb
tests/_examples/builtins/encoding_converter/converting.rb in the metorex repository.
# encoding: binary
# A conversion carries text from one encoding to another, refusing what
# neither side can spell.
converter = Encoding::Converter.new("utf-8", "iso-8859-1")
p(converter.convert("plain"))
begin
Encoding::Converter.new("utf-8", "ascii").convert("\u{8765}")
rescue Encoding::UndefinedConversionError => refused
p(refused.source_encoding_name)
p(refused.destination_encoding_name)
p(refused.error_char)
end
begin
converter.convert("\xf1abcd")
rescue Encoding::InvalidByteSequenceError => refused
p(refused.source_encoding_name)
p(refused.destination_encoding_name)
p(refused.error_bytes.bytes)
p(refused.readagain_bytes.bytes)
end
# The trouble belongs to the step it stopped, which for a conversion that
# passes through UTF-8 is not always the pair the converter was built with.
indirect = Encoding::Converter.new("EUC-JP", "ISO-8859-1")
begin
indirect.convert("abc\xA1\xFFdef")
rescue Encoding::InvalidByteSequenceError => refused
p(refused.destination_encoding_name)
end
# An encoding stands for an Encoding rather than for the class it is held as.
p(Encoding::UTF_8.class)
p("held".encoding.instance_of?(Encoding))
Output:
"plain"
"UTF-8"
"US-ASCII"
"蝥"
"UTF-8"
"ISO-8859-1"
[241]
[97]
"UTF-8"
Encoding
true