我试图解析收到的电子邮件,并希望将身体存储为数据库中的编码字符串 UTF-8
,但我很快注意到,并非所有电子邮件都发送了 Content-Type
信头中的字符集信息。在尝试一些手动快速修补后,我决定请SO的友好人士帮忙。
老实说,我秘密地希望 String.encoding
自动返回字符串中使用的编码,然而,在我发送测试电子邮件给它之后,它总是显示 ASCII-8BIT
。 当我执行 引号可打印
时,我开始出现这个问题,如果我同时获得一些 ;charset=blabla
信息,这个选项似乎有效。
input = input.gsub(/
/, "
").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")
我尝试了互联网上发现的若干“解决方案 ”, 但大多数似乎都与文件阅读/写作有关, 也试验了几颗宝石来检测编码(尽管似乎没有人真的玩这个把戏或已经非常过时 ) 。 这应该是可能的,并且感觉答案似乎正视我的脸,希望这里的人能够对我的状况给予一些启发,并告诉我我到底做了什么错事。
- using ruby 1.9.3