为什么我的字符串中有 `=` 而不是 `\x`?

Why is there `=` instead of `\x` in my string?

我正在解析一封电子邮件正文,我在电子邮件的来源中有这个:

Questo dominio =E8 aperto e operativo da diversi anni, non riesco a = capire l=92esigenza e cosa =E8 cambiato.=20

我知道客户端使用了字符集 iso-8859-1。我也知道iso-8859-1中的"\xE8"是utf-8中的"é":

"\xE8".encode "UTF-8", "ISO-8859-1" # => "è"

为什么我找到 "=E8" 而不是 "\xE8"

您需要先从 quoted-printable 编码解码,然后从 ISO-8859-1 编码为 UTF-8:

string = "Questo dominio =E8 aperto e operativo da diversi anni, non riesco a = capire l=92esigenza e cosa =E8 cambiato.=20"
puts Mail::Encodings::QuotedPrintable.decode(string).encode('UTF-8', 'ISO-8859-1')
# => Questo dominio è aperto e operativo da diversi anni, non riesco a = capire l=92esigenza e cosa =E8 cambiato.=20