【发布时间】:2019-08-07 16:45:56
【问题描述】:
我想使用 ruby 的 file.foreach 读取带有 UTF-8 Bom 的文本文件。通过添加作为第一行将 bom 插入文件中:
myFile.write "\uFEFF"。
从此链接下载 myFile.txt:
https://wetransfer.com/downloads/b42363faaff561e7e3ca2edbe850d88d20190807164816/c6e4e1
我只是尝试像这样读取文件
File.foreach(myFile).with_index do |line, line_num|
puts "line = " + line
puts "line.bytes = " + line.bytes.to_s()
puts "line.bytes.map(&:chr) = " + line.bytes.map(&:chr).to_s()
end
问题是该行看起来文件的每一行都是空的。但是我可以看到那里有一些使用字节的东西。还尝试使用 File.foreach 的编码参数如下
File.foreach(myFile, :encoding=> 'r:bom|utf-8').with_index do |line,line_num|
puts "line = " + line
puts "line.bytes = " + line.bytes.to_s()
puts "line.bytes.map(&:chr) = " + line.bytes.map(&:chr).to_s()
end
但我得到了相同的结果。在这两种情况下,ruby 似乎都可以识别 utf-8 bom,因为puts line.encoding 会产生“utf-8”。但是我不能像往常一样访问行字符串的字符。例如,使用 myFile.txt 永远不会触发以下条件。
if line[0,5] == 'Hello'
puts "Hello catched"
end
你知道如何使用 file.foreach 命令读取我的文件吗?
问候
【问题讨论】:
-
请不要在下载前使用wetransfer或其他不可读的文件托管。最好使用pastebin.com
-
"a text file with an UTF-8 Bom" – 您的文件以
0xFF0xFE开头,这是 UTF-16 的字节顺序标记(小字节序)。 -
Ruby 将编码显示为 utf-8 的事实意义不大。 Ruby 很容易导致编码错误,在这种情况下该值毫无意义,您需要自己修复它。
-
@lacostenycoder:我无法让它发挥作用。您可以像这样在 ruby 中创建 myFile.txt: myFile = File.new('myFile.txt', "w") myFile.write "\uFEFF" myFile.write "Hello\n" myFile.write "我可能包含 UTF -8 个字符为 DøRBLAD\n" myFile.flush myFile.close
标签: ruby utf-8 byte-order-mark