扫描:UTF-8中的无效字节序列(参数错误)

6

我想在Ruby中读取一个.txt文件并逐行拆分文本。

这是我的代码:

def file_read(filename)
  File.open(filename, 'r').read
end

puts f = file_read('alice_in_wonderland.txt')

这个完美运作。但是当我添加line_cutter方法时,就像这样:

def file_read(filename)
  File.open(filename, 'r').read
end

def line_cutter(file)
  file.scan(/\w/)
end

puts f = line_cutter(file_read('alice_in_wonderland.txt'))

我遇到了一个错误:

`scan': invalid byte sequence in UTF-8 (ArgumentError)

我在网上找到了一个有关修复Ruby中无效UTF-8编码的链接,并尝试将其用于自己的代码,但没有起作用。 我该如何解决此错误?
文件链接: 文件

@sawa 抱歉,我想知道如何解决这个错误。 - anonn023432
1
这篇链接的文章是在2006年写的,你现在不会还在使用Ruby 1.8吧? - Stefan
2
最好使用File.read(filename)。这样不会干扰保持打开的文件。 - sawa
1
@sawa 完成了。但我仍然得到相同的错误。 - anonn023432
你可以发布导致此错误的文件或部分吗? - Stefan
显示剩余2条评论
2个回答

7
链接的文本文件包含以下行:
字符集编码:ISO-8859-1
如果不想或无法进行转换,则必须告诉 Ruby 此文件是 ISO-8859-1 编码。否则将使用默认外部编码(在您的情况下为 UTF-8)。可能的方法是: link1:ISO-8859-1 编码。 link2:默认外部编码 link3:(在您的情况下为)UTF-8
s = File.read('alice_in_wonderland.txt', encoding: 'ISO-8859-1')
s.encoding  # => #<Encoding:ISO-8859-1>

如果您喜欢将字符串编码为UTF-8(请参见utf8everywhere.org),也可以这样做:
s = File.read('alice_in_wonderland.txt', encoding: 'ISO-8859-1:UTF-8')
s.encoding  # => #<Encoding:UTF-8>

2

如果您直接从页面上读取文件,似乎可以正常工作,也许您本地的副本有些问题。请尝试以下操作:

require 'net/http'

uri = 'http://www.ccs.neu.edu/home/vip/teach/Algorithms/7_hash_RBtree_simpleDS/hw_hash_RBtree/alice_in_wonderland.txt'
scanned = Net::HTTP.get_response(URI.parse(uri)).body.scan(/\w/)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接