我正在尝试解析传入的电子邮件,并希望将正文存储为数据库中的UTF-8
编码字符串,但我很快就注意到并非所有电子邮件都在{}中发送字符集信息{1}}标题。在尝试使用Content-Type
和String.force_encoding
进行一些手动快速修复后,我决定向友好的人们询问SO。
说实话,我暗中希望String.encode
能够自动返回字符串中使用的编码,但是在我发送测试电子邮件后,它总是显示为String.encoding
。当我实现ASCII-8BIT
作为一个选项时,我开始遇到这个问题,如果我还获得了一些quoted-printable
信息,这似乎有效。
;charset=blabla
我一直在试验我在互联网上找到的几个“解决方案”,但是大多数似乎与文件读/写有关,并且尝试了一些用于检测编码的宝石(但是似乎没有一个真的可以解决这个问题)令人难以置信的过时)。它应该是可能的,感觉好像答案正好盯着我,希望这里的某个人能够对我的情况有所了解并告诉我我做错了什么。
答案 0 :(得分:0)
您可以使用https://github.com/janx/chardet检测电子邮件文本的原始编码。
示例:
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'UniversalDetector'
=> false
irb(main):003:0> p UniversalDetector::chardet('hello')
{"encoding"=>"ascii", "confidence"=>1.0}
=> nil
答案 1 :(得分:0)
您是否尝试过https://github.com/fac/cmess?
== DESCRIPTION
CMess捆绑了几个旨在处理的工具 在字符集和语境中出现的各种问题 编码。目前,有:
guess_encoding :: 用于识别给定编码的简单助手 串。 包括自动检测编码的功能 输入。
[...]