我有一个 ISO-2022-JP-2 字符串,需要将其转换为 UTF-8,但出现错误。
更具体地说:我正在尝试阅读使用quoted-printable 传输的电子邮件。这封电子邮件包含单词tōtatsu
(注意 o 上方的重音),我正在转换给定的文本,如下所示:
given = "t=1B$(D+W=1B(Btatsu"
text = given.unpack("M*").first #convert from quoted-printable
基本上,这将替换=1B
为正确的\e
转义字符,并且字符串text
变为t␛$(D+W␛(Btatsu
.
Wikipedia 说它用于␛$(D
切换到JIS X 0212-1990,同样␛(B
用于切换回 ASCII。请注意,这␛$(D
是 ISO-2022-JP-2 中的新内容,它不是原始 ISO-2022-JP 的一部分。
但是,字符串的编码仍然是 ASCII,所以我想我必须强制使用正确的编码,因为 Ruby 无法知道实际的字符串是 ISO-2022-JP-2?
puts text.encoding # ASCII-8BIT
text = text.force_encoding('iso-2022-jp-2')
现在事实证明
text.encode('utf-8')
无法转换给定的字符串:code converter not found (ISO-2022-JP-2 to UTF-8) (Encoding::ConverterNotFoundError)
如何将此字符串转换为 UTF-8?