我有一个脚本,它解析一个大型文本文件,提取某些值(使用line.split),并将它们存储在一个文本文件中。当八进制值保存到文件中时,无法解释它们,我遇到了问题。
当我手动指定string字符的oct时,它工作正常:

test = "\320\232\320\250\320\220"

puts test

但是,如果我使用title = line.split('=')[1]获取上面的字符串,则字符串值是相同的,但是当我尝试puts时,它只是重新声明整个字符串(包括引号)
我做错什么了?

最佳答案

@xaxxon解释了为什么在从文件中读取字符串时不转换八进制代码,而不是将它们表示为ruby文本。这里有一个简单的方法,可以将octal\xxx编码子字符串转换为适当的ascii字符。

def octal_convert(s)
  s.gsub(/\\(?:\\|[0-7]{3})/) do |capture|
    capture == "\\\\" ?
      "\\" :
      capture[1,3].to_i(8).chr
  end
end

test = 'ab\\\\cd\320\232\320\250\320\220'
=> "ab\\\\cd\\320\\232\\320\\250\\320\\220"
octal_convert(test)
=> "ab\\cd\xD0\x9A\xD0\xA8\xD0\x90"

关于ruby - Ruby不能避免掉入八进制看跌期权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16370153/

10-13 09:01