在US-ASCII中拆分无效的字节序列

时间:2018-03-28 16:07:00

标签: ruby

我试图从文件plainprogram.txt中取一行,将其拆分到空格中,然后将它们存储在一个数组中。这是plainprogram.txt中的普通程序文本:

5 cmt A program with a simple loop that counts down.
10 get x
20 if x = 0 goto 90
30 output x
40 let x = x – 1
50 goto 20
90 stop

它应该类似于可怕的编程语言的代码。这是我的代码:

File.readlines("plainprogram.txt").each do |line|
  pieces = line.split()
end

我收到此错误

Traceback (most recent call last):
3: from main.rb:13:in <main>
2: from main.rb:13:in each
1: from main.rb:14:in block in <main>
main.rb:14:in split: invalid byte sequence in US-ASCII
(ArgumentError)

我无法弄清楚为什么这段代码会引发错误。我不明白为什么split会抛出此错误,也不知道如何修复它。

2 个答案:

答案 0 :(得分:3)

Ruby通常默认为UTF-8,但有关您的环境/版本的内容似乎并非如此。您可以强制执行如下编码:

File.readlines('plainprogram.txt', :encoding => 'UTF-8')

答案 1 :(得分:0)

输入中有一个非ascii字符,如果没有hexdump之类的工具,以下对程序的轻微修改可以识别它:

File.readlines("plainprogram.txt").each do |line|
  line.each_char { |chr| STDERR.puts "#{chr} : #{chr.ord}" if chr.ord > 127 }
  pieces = line.split()
end