2013/7/13 headius (Charles Nutter) <headius / headius.com>:
> Bug #8630: Transcoding high-bit bytes from ASCII-8BIT to a text encoding =
should be :invalid, not :undef
> https://bugs.ruby-lang.org/issues/8630

> When transcoding from ASCII-8BIT (BINARY) to a text encoding (e.g. UTF-8)=
, MRI will raise an error for high-bit bytes:
>
> "\xC3".encode("utf-8", "binary") # =3D> Encoding::UndefinedConversionErro=
r
>
> This can be disabled by passing :undef =3D> :replace as an option to the =
encode call.
>
> I believe that "undef" is the wrong treatment for this error. Undef means=
 that the input character has no representation in the target encoding. In =
this case, the error is raised because only US-ASCII range of bytes are *va=
lid* for transcoding, so the transcoding of high-bit bytes is by definition=
 *invalid*, not undefined. In other words, high-bit bytes in ASCII-8BIT/BIN=
ARY are *invalid* as characters.

No.

ASCII-8BIT consists 128 ASCII characters and 128 special characters to
represent 0x80 to 0xff binary bytes.
The special characters are not representable in UTF-8.
So UndefinedConversionError is raised.

The validity of a characetr is defined by encoding, not transcoding.
--=20
Tanaka Akira