【发布时间】:2018-11-17 19:27:53
【问题描述】:
我在做什么: 我在 Rails 4 应用程序中使用 gmail gem 定期从特定帐户获取电子邮件附件。以下是核心部分的摘录(此处为简单起见,仅考虑第一封电子邮件及其第一个附件):
require 'gmail'
Gmail.connect(@user_email,@user_password) do |gmail|
if gmail.logged_in?
emails = gmail.inbox.emails(:from => @sender_email)
email = emails[0]
attachment = email.message.attachments[0]
File.open("~/temp.csv", 'w') do |file|
file.write(
StringIO.new(attachment.decoded.to_s[2..-2].force_encoding("ISO-8859-15").encode!('UTF-8')).read
)
end
end
end
附加文件的编码可能会有所不同。我目前遇到的问题是芬兰语。它包含芬兰语字符和一个上标 3 字符。
这是我在运行上述代码时期望得到的。 (这是我通过 gmail 用户界面手动下载附件时得到的):
问题是什么:
但是,我得到了以下奇怪的结果。
这就是在 Sublime Text 中打开的 temp.csv 的样子(直接通过 winscp)。第一行和小部分看起来不错,但随后是中文/日文字符:
这是 temp.csv 在记事本中的样子(通过 winscp 下载后)。看起来不错,除了在每个字符之间插入了一个空格并且新行似乎丢失了:
我尝试过的:
我没有成功尝试过:
-
.force_encoding(...)具有所有不同的“ISO-8859-x”字符集 - 将
force_encoding("ISO-8859-15").encode!('UTF-8')放在.read之外(有效但不能解决问题) - 编码为 UTF-8 而不首先强制另一个编码,但这会导致
Encoding::UndefinedConversionError: "\xC4" from ASCII-8BIT to UTF-8 - 在
File.open()中使用'wb'和'w+b'以二进制形式写入(奇怪的是,这似乎对结果没有影响)。 - 在 stackoverflow 和网络上搜索其他想法。
任何想法都将不胜感激!
【问题讨论】:
标签: ruby-on-rails ruby character-encoding gmail