这种情况是奇怪的 UTF-8 编码转换吗?

Is this case a weird UTF-8 encoding conversion?

我正在使用一个远程应用程序,似乎 对编码做了一些魔术。该应用程序根据用户输入呈现清晰的响应(我将其称为 True 和 False)。我知道两个有效值,它们将呈现 'True',所有其他值应该是 'False'。

我(意外地)发现有趣的是,提交损坏的值会导致 'True'。

示例输入:

USER10 //gives True
USER11 //gives True
USER12 //gives False
USER.. //gives False
OTHERTHING //gives False

所以基本上只有这两个第一个值呈现 True 响应。

我注意到 USERÀ±0(十六进制 \x55\x53\x45\x52\C0\xB1\x30)令人惊讶地被接受为 True。 我确实检查了其他十六进制字节,但没有成功。这让我得出一个结论,即 \xC0\xB1 可以以某种方式转换为 0x31 (='1')。

我的问题是 - 这怎么可能发生?该应用程序是否正在执行从 UTF-16(或其他)到 UTF-8 的一些奇怪的转换?

我会很感激 comments/ideas/hints。

C0 是双字节 UTF-8 序列的无效起始字节,但如果错误的 UTF-8 解码器接受它,C0 B1 将被解释为 ASCII 31h(字符 1).

引用 Wikipedia:

...(C0 and C1) could only be used for an invalid "overlong encoding" of ASCII characters (i.e., trying to encode a 7-bit ASCII value between 0 and 127 using two bytes instead of one....