使用 utf-8 编码写入和读取文件
Posted
技术标签:
【中文标题】使用 utf-8 编码写入和读取文件【英文标题】:Write and read a file with utf-8 encoding 【发布时间】:2011-07-07 00:10:37 【问题描述】:我一直在阅读所有与 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
这非常有效。 is 在文件中正确生成 © 符号,并将 © 读回给我并将其打印在屏幕上。
但是当我在实际项目中使用相同的代码时,我会将其写入文件而不是 © 符号:\u00A9
FWIW:我在对我的代码运行 rspec (v1.2.9) 测试时得到了这个结果。该规范会生成一个带有 © 符号的文件,然后将文件读回以检查内容。
我目前在 Ruby 1.9.2 中运行它,但我还需要一直支持到 Ruby 1.8.6。这是一个带有 RubyInstaller.org 版本的 Ruby 的 Windows 环境。
【问题讨论】:
【参考方案1】:如果我执行你的代码,我会在特殊字符上得到一个错误。你能试试这个代码吗?
# 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
然后在我的 windows 盒子上得到
#<Encoding:Windows-1252>
test © foo
我不知道为什么会有 Â..
【讨论】:
你在哪个控制台运行 ruby?如果是 windows 命令提示符,它不理解 UTF-8,因此您的 UTF-8 输出正在由 Windows CP-1252 应用程序显示。 注意:你可以用text = File.open(filename,'r:UTF-8',&:read)
更简洁地阅读UTF-8
在 Windows 中,您可以更改代码页以使用 chcp 65001
理解 utf8,但仍有一些亚洲符号无法正确显示为 reproduced。【参考方案2】:
用更少的代码读取文件:
# encoding: UTF-8
file_content = File.open("test.txt", "r:UTF-8", &:read)
【讨论】:
【参考方案3】:您的应用程序在哪个操作系统上运行?文件的默认编码可能是 ASCII。将w:utf-8
和r:utf-8
添加到开放参数中是否有帮助?
【讨论】:
我尝试了您建议的编码提示,但在运行 RSpec 测试时似乎没有什么不同。我更新了我的问题以包括 ruby 版本/平台信息。也许我需要升级到 rspec 2.x以上是关于使用 utf-8 编码写入和读取文件的主要内容,如果未能解决你的问题,请参考以下文章