У меня есть строка ISO-2022-JP-2, и мне нужно преобразовать ее в UTF-8, но я получаю сообщение об ошибке.
Чтобы быть более конкретным: я пытаюсь прочитать электронное письмо, которое передается с использованием кавычек-печати. Это электронное письмо содержит слово tōtatsu
(обратите внимание на ударение над буквой o), и я преобразую данный текст следующим образом:
given = "t=1B$(D+W=1B(Btatsu"
text = given.unpack("M*").first #convert from quoted-printable
По сути, это заменит =1B
правильным escape-символом \e
, а строка в text
станет t␛$(D+W␛(Btatsu
.
Википедия говорит, что ␛$(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?