在rails中不兼容的字符编码 – 如何理智地失败/跳过?

我通过IMAP导入电子邮件主题时遇到问题。 我遇到了问题,我认为与电子邮件主题中的£符号有关。 花了几个小时游览各种答案我似乎无法找到任何有用的东西…如果我尝试以下…

使用ruby 2.1.2 views / emails / index

=email.subject incompatible character encodings: ASCII-8BIT and UTF-8 =email.subject.scrub incompatible character encodings: ASCII-8BIT and UTF-8 = email.subject.encode!('UTF-8', 'UTF-8', :invalid => :replace) invalid byte sequence in UTF-8 = email.subject.force_encoding('UTF-8') invalid byte sequence in UTF-8 = email.subject.encode("UTF-8", invalid: :replace) "\xA3" from ASCII-8BIT to UTF-8 

/ xA3是’£’符号,不应该是那么不寻常。

我目前正在使用以下内容……

 -if email.subject.force_encoding('UTF-8').valid_encoding? =email.subject -else "Can't display" 

理想情况下,我只需要检查编码是否正常工作,然后执行类似#scrub的操作……我甚至可以非常愉快地使用’/ xA3’,只要它不是’抛出一个错误,我基本上可以看到文本。

关于如何正确地做到这一点或者用软糖来解决问题的任何想法?

经过多次痛苦,这就是我解决它的方法。

您需要在environment.rb文件中添加默认编码,如下所示:

 # Load the rails application require File.expand_path('../application', __FILE__) Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 # Initialize the rails application Stma::Application.initialize! 

显然这与Ruby在日本的根源有关。 在处理日语(或俄语)字符时,这没有用,所以这种事情不是标准的。

然后我做了以下事情:

 mail_object = Mail.new(mail[0].attr["RFC822"]) subject = mail_object.subject.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '') if mail_object.subject body_part = (mail_object.text_part || mail_object.html_part || mail_object).body.decoded body = body_part.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '') if body_part from = mail_object.from.join(",") if mail_object.from #deals with multiple addresses to = mail_object.to.join(",") if mail_object.to #deals with multiple addresses 

这应该把所有的主要部分都变成你可以轻松使用的字符串/文本,如果有些东西丢失/exception……等等,这些字符串/文本不会出现故障。 希望能帮助某人……