如何编写£;(GBP)从Ruby登录CSV文件并在Excel中正确读取?

如何编写£;(GBP)从Ruby登录CSV文件并在Excel中正确读取?,excel,ruby,encoding,utf-8,ascii,Excel,Ruby,Encoding,Utf 8,Ascii,当我使用Ruby编写一个CSV文件,其中包含符号,并使用Excel打开它时,我看到的是这个符号 我的理解是Ruby使用UTF-8,但是Excel使用不同的编码()来解释这个文件 我试图编写一个US-ASCII编码的CSV文件,如下所示: csv = CSV.open(filename, 'w:US-ASCII') csv << "\xA3" csv.close csv=csv.open(文件名为“w:US-ASCII”) csv当然,Excel不一定要使用ASCII。例如,我可以很

当我使用Ruby编写一个CSV文件,其中包含
符号,并使用Excel打开它时,我看到的是这个符号

我的理解是Ruby使用UTF-8,但是Excel使用不同的编码()来解释这个文件

我试图编写一个US-ASCII编码的CSV文件,如下所示:

csv = CSV.open(filename, 'w:US-ASCII')
csv << "\xA3"
csv.close
csv=csv.open(文件名为“w:US-ASCII”)

csv当然,Excel不一定要使用ASCII。例如,我可以很容易地将日语字符输入Excel单元格,而这些字符肯定不能用ASCII表示

默认情况下,Ruby在其内部表示中使用Unicode,但每个字符串对象都包含自己的编码,因此,如果您愿意,理论上可以将字符串与不同的编码混合。在您的情况下,您希望在写入文件时强制进行某种编码。这可以通过使用
w:
输出选项(如您所做的)或使用
external\u encoding:encoding::US-ASCII
来完成。有关
编码中常量的名称,请参见


我不认为US-ASCII是编码的一个好选择,因为在编码中没有英镑符号。当你试图写一个英镑符号时,我本以为你会在stderr上收到一条警告信息。如果您需要8位编码,
ISO-8859-1
应该可以完成这项工作,但我建议您编写UTF-8和。导入UTF的可能性至少从Excel 2007开始就存在。

当然,Excel不一定要使用ASCII。例如,我可以很容易地将日语字符输入Excel单元格,而这些字符肯定不能用ASCII表示

默认情况下,Ruby在其内部表示中使用Unicode,但每个字符串对象都包含自己的编码,因此,如果您愿意,理论上可以将字符串与不同的编码混合。在您的情况下,您希望在写入文件时强制进行某种编码。这可以通过使用
w:
输出选项(如您所做的)或使用
external\u encoding:encoding::US-ASCII
来完成。有关
编码中常量的名称,请参见



我不认为US-ASCII是编码的一个好选择,因为在编码中没有英镑符号。当你试图写一个英镑符号时,我本以为你会在stderr上收到一条警告信息。如果您需要8位编码,
ISO-8859-1
应该可以完成这项工作,但我建议您编写UTF-8和。导入UTF的可能性至少从Excel 2007开始就存在。

不是您在发送的链接中看到的
US-ASCII
。谢谢你,贾科莫。但是如果是这样的话,Excel在回读时使用的是什么符号和编码呢?我想指出的一点是:使用
ISO8859-1
作为编码。阅读和写作有很大的对称性。从其中一个你可以了解到另一个。谢谢你,贾科莫,我来试试!IIRC、Excel在UTF-8 CSV文件前面加上前缀。您可以尝试一下,看看它是否使导入更容易。
不是您在发送的链接中看到的
US-ASCII
。谢谢你,贾科莫。但是如果是这样的话,Excel在回读时使用的是什么符号和编码呢?我想指出的一点是:使用
ISO8859-1
作为编码。阅读和写作有很大的对称性。从其中一个你可以了解到另一个。谢谢你,贾科莫,我来试试!IIRC、Excel在UTF-8 CSV文件前面加上前缀。您可以尝试一下,看看它是否使导入更容易。谢谢。有没有办法在不需要用户干预的情况下通知Excel使用哪种编码?@mottalrd:用户如何使用Excel读取文件?如果他启动Excel然后导入CSV,这已经是用户干预。或者您想从命令行删除Excel,并自动打开文件?谢谢您的检查。在我的例子中,用户只是双击Excel,他们没有显式地导入它。现在,我通过以ISO格式编写文件来解决这个问题。谢谢你的意思是:双击代表Excel应用程序链接的图标?那么他怎么才能选择要读取的CSV文件呢?谢谢。有没有办法在不需要用户干预的情况下通知Excel使用哪种编码?@mottalrd:用户如何使用Excel读取文件?如果他启动Excel然后导入CSV,这已经是用户干预。或者您想从命令行删除Excel,并自动打开文件?谢谢您的检查。在我的例子中,用户只是双击Excel,他们没有显式地导入它。现在,我通过以ISO格式编写文件来解决这个问题。谢谢你的意思是:双击代表Excel应用程序链接的图标?然后他如何选择要读取的CSV文件?