请原谅我,如果这是相当基本的,但我似乎无法使我的代码正常工作。我要做的就是打开一个文件,读取它的一行,然后解析数据。我可以很好地解析数据,但是当我将这个文件读入ruby时,它想在每个字符后面放一个空格,因为我的源文件被视为IBM437文件或诸如此类的东西。
这是我的代码的当前状态:
if(File.exists?(pingdata))
telemetry = File.open(pingdata, 'r') { |f| f.readline }
if String.method_defined?(:encode)
telemetry.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
telemetry.encode!('UTF-8', 'UTF-16')
else
ic = Iconv.new('UTF-8', 'UTF-8//IGNORE')
telemetry = ic.iconv(telemetry)
end
end
tArray = Array.new
tArray.clear
tArray = telemetry.split(/[\&\=]/)
puts "This is a test p0: #{tArray[0]} and p1: #{tArray[1]}"
输出如下:
This is a test p0: t e s t p a r a m and p1: 0 2 8 8 8
我理解编码和东西,但很明显我 - 不要 - 了解如何在ruby中正确地完成它。我能得到一些指导吗?我已经尝试了很多很多东西来尝试让它工作,因为你可以看到上面的代码(可能没用)iconv块。我真的在努力让这个工作起作用。
哦,我已经尝试将f.readline改为f.readline.encode,但它也无法正常工作。我收到以下错误:
test.rb:11:in `encode': "\xFF" on US-ASCII (Encoding::InvalidByteSequenceError)
和
test.rb:11:in `encode': U+00A0 to ASCII-8BIT in conversion from IBM437 to UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
编辑 -
我想我已经弄明白了。我写的代码实际上运行正常。只是不在Ruby for Windows中。它在OSX中工作正常。它在* nix中工作正常。字符串正确存储在变量中。但是,它不适用于Windows。
我不得不编写一个愚蠢的黑客来解决它,因为这将是一个仅限Windows的实用程序。
答案 0 :(得分:0)
实际编码的文件是什么?您的代码似乎暗示文本实际上是UTF-8并且您将其更改为UTF-16并返回仅替换无效字符?
我很难在没有样本文件的情况下准确测试你想要的东西,但在我看来,你可能只需要这样做:
tArray = File.read(pingdata).encode("UTF-8", :invalid => :replace, :replace => '').split(/[\&\=]/)
这有用吗?