我有一个脚本,它解析一个大型文本文件,提取某些值(使用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/