Windows中的Ruby编码问题

时间:2014-08-27 01:15:11

标签: ruby windows encoding

我写了一个简单的代码,使用'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编码相关的简单问题,我尝试了很多解决方案,但我真的无法解决这个问题。

2 个答案:

答案 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(不鼓励)。