我一直在阅读所有与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环境。
答案 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-8
和r:utf-8
添加到开放参数中会有帮助吗?