1

我正在尝试解析传入的电子邮件并希望将正文作为UTF-8编码字符串存储在数据库中,但是我很快注意到并非所有电子邮件都在Content-Type标题中发送字符集信息。在尝试了一些手动快速修复后String.force_encodingString.encode我决定询问 SO 的友好人士。

老实说,我暗中希望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")

我一直在尝试我在互联网上找到的几种“解决方案”,但大多数似乎与文件读/写有关,并尝试了一些用于检测编码的 gem(但似乎没有一个真正能奏效或非常过时) . 这应该是可能的,感觉好像答案就在我眼前,希望这里的某个人能够对我的情况有所了解,并告诉我我做错了什么。

  • 使用红宝石 1.9.3
4

2 回答 2

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
于 2012-05-29T09:54:14.313 回答
0

你试过https://github.com/fac/cmess吗?

== 描述

CMess 在其底层捆绑了几个工具,旨在处理在字符集和编码的上下文中出现的各种问题。目前,有:

guess_encoding:: 识别给定字符串编码的简单助手。包括自动检测输入编码的能力。

[...]

于 2013-03-09T19:12:24.640 回答