在ruby中读取编码文件会导致我无法摆脱的空间

时间:2014-01-07 23:41:59

标签: ruby file encoding

请原谅我,如果这是相当基本的,但我似乎无法使我的代码正常工作。我要做的就是打开一个文件,读取它的一行,然后解析数据。我可以很好地解析数据,但是当我将这个文件读入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的实用程序。

1 个答案:

答案 0 :(得分:0)

实际编码的文件是什么?您的代码似乎暗示文本实际上是UTF-8并且您将其更改为UTF-16并返回仅替换无效字符?

我很难在没有样本文件的情况下准确测试你想要的东西,但在我看来,你可能只需要这样做:

tArray = File.read(pingdata).encode("UTF-8", :invalid => :replace, :replace => '').split(/[\&\=]/)

这有用吗?