Я пытаюсь разобрать входящие сообщения электронной почты и хочу сохранить тело как закодированную строку UTF-8
в базе данных, однако я быстро заметил, что не все e -mails отправляет информацию о кодировке в заголовок Content-Type
. Попробовав некоторые быстрые исправления вручную с String.force_encoding
и String.encode
, я решил спросить дружелюбных людей SO.mime body guess charset (и конвертировать в UTF-8)
Чтобы быть честным, я тайно надеялся на String.encoding
, чтобы автоматически вернуть кодировку, используемую в строке, однако она всегда появляется ASCII-8BIT
после того, как я отправил на нее тестовое сообщение. У меня возникла такая проблема, когда я реализовал quoted-printable
в качестве опции, которая, казалось, работала, если я также получил информацию о ;charset=blabla
.
input = input.gsub(/\r\n/, "\n").unpack("M*").first
if(charset)
return input.force_encoding(charset).encode("utf-8")
end
# This is obviously wrong as the string is not always ISO-8859-1 encoded:
return input.force_encoding("ISO-8859-1").encode("utf-8")
Я экспериментировал с несколькими «решения» я нашел в Интернете, однако большинство, казалось, относятся к файлу для чтения/записи, и экспериментировал с несколькими камнями для обнаружения кодирования (однако никто на самом деле, казалось, не делать трюк или были невероятно устаревшими). Это должно быть возможно, и кажется, что ответ смотрит на меня прямо в лицо, надеюсь, кто-то здесь сможет пролить свет на мою ситуацию и рассказать мне, что я делал совершенно неправильно.
- использованием Руби 1.9.3
Хм, это, кажется, порт фактического 'chardet' камень. Оригинал ломается, как только вы пытаетесь загрузить его, но я попробую попробовать, когда вернусь домой и опубликую результаты. – CharlesLeaf
Эта версия жемчужины также выглядит немного устаревшей, в зависимости от того, как я вставляю свою тестовую строку, она либо просто говорит ASCII с уверенностью 1.0, либо дает «не может преобразовать String в Integer», которая, похоже, исходит из 'CodingStateMachine. rb' в этой строке 'byteCls = @_mModel ['classTable'] [c]', но мне нужно провести дополнительное расследование, чтобы проверить, могу ли я это разрешить. – CharlesLeaf
Как насчет этого: https://github.com/brianmario/charlock_holmes – Hooopo