我写了一个简单的代码,使用'win32ole'从MS-Outlook读取电子邮件,然后将其主题保存为CSV文件。除编码系统外,一切顺利。当我打开我的CSV文件时,“André”等字样打印为“Andr \ x82”。我希望我的输出格式等于我的输入。
# encoding: 'CP850'
require 'win32ole'
require 'CSV'
Encoding.default_external = 'CP850'
ol = WIN32OLE.new('Outlook.Application')
inbox = ol.GetNamespace("MAPI").GetDefaultFolder(6)
email_subjecs = []
inbox.Items.each do |m|
email_subjects << m.Subject
end
CSV.open('MyFile.csv',"w") do |csv|
csv << email_subjects
end
O.S:Windows 7 64位
Encoding.default_external - &gt; CP850
Languadge - &gt; PT
ruby -v - &gt; 1.9.2p290(2011-07-09)[i386-mingw32]
这似乎是一个与外部Windows编码相关的简单问题,我尝试了很多解决方案,但我真的无法解决这个问题。
答案 0 :(得分:1)
1)您的文件名缺少结束语。
2)CSV.open()的默认打开模式是'rb',因此您无法使用您发布的代码写入文件。
3)您没有将要写入的文本的编码发布到文件中。
4)您没有发布想要写入数据的编码。
5)
当我打开我的CSV文件时,“é”等字样打印为“\ x82”
告诉您的观看设备不要这样做。
答案 1 :(得分:0)
魔术注释仅设置当前(.rb
)文件应被读取的编码。它没有设置default_external
。试试set RUBYOPT=-E utf-8
,使用CSV.open('MyFile.csv', encoding: 'UTF-8')
打开文件,或在文件顶部设置Encoding.default_external
(不鼓励)。