使用utf-8编码写入和读取文件

时间:2011-03-02 04:19:14

标签: ruby utf-8

我一直在阅读所有与UTF-8相关的问题和博文,我在test.rb文件中有以下示例:

# encoding: UTF-8
File.open("test.txt", "w") do |f|
  f.write "test © foo"
end

File.open("test.txt", "r") do |f|
  puts f.read
end

这完美无缺。在文件中正确生成©符号,它会将©读回我并将其打印在屏幕上。

但是当我在实际项目中使用相同的代码时,我将其写入文件而不是©符号:\u00A9

FWIW:我在对我的代码运行rspec(v1.2.9)测试时得到了这个结果。规范生成一个带有©符号的文件,然后重新读取文件以检查内容。

我目前正在Ruby 1.9.2中运行它,但我还需要支持一直回到Ruby 1.8.6。这是一个带有RubyInstaller.org版本Ruby的Windows环境。

3 个答案:

答案 0 :(得分:46)

如果我执行你的代码,我会在特殊字符上出错。你能试试这段代码吗?

# encoding: UTF-8
File.open("test.txt", "w:UTF-8") do |f| 
  f.write "test \u00A9 foo" 
end 

#Encoding.filesystem = "UTF-8"
p Encoding.find("filesystem") 
File.open("test.txt", "r:UTF-8") do |f| 
  puts f.read 
end 

在我的窗户框上,我然后

#<Encoding:Windows-1252>
test © foo

我不知道为什么会有......

答案 1 :(得分:40)

使用更少的代码读取文件:

# encoding: UTF-8
file_content = File.open("test.txt", "r:UTF-8", &:read)

答案 2 :(得分:2)

您的应用程序在哪个操作系统上运行?可能是文件的默认编码是ASCII。如果您将w:utf-8r:utf-8添加到开放参数中会有帮助吗?