从ruby中的文件解析字符串文字

时间:2014-11-13 12:55:31

标签: ruby

我正在从ruby中的文件中读取一个字符串。这个字符串中有转义序列,我想把它变成合适的字符。

例如,我可能有这样的字符串:

"this is a string\n"

文件中包含实际字符\n,而不是换行符。

是否有内置函数来解码这些文字?或者我是否必须手动写一些东西?

请注意,我没有使用rails,文件数据不是json。

4 个答案:

答案 0 :(得分:1)

如果这只是一个纯文本文件(例如,不是JSON,YAML或其他具有特定转义序列的数据格式),那么这些字符序列没有特殊含义。因此,如果你想在你的应用程序的上下文中给它们一个,你将不得不编写代码来自己完成。对于新行,具体来说,你可以这样做:

input.gsub!('\n', "\n")

答案 1 :(得分:1)

如果您对JSON格式支持的转义序列感到满意,可以执行以下操作:

require 'json'

def unescape(str)
  JSON.parse("[\"#{str}\"]")[0]
end

p unescape("\\nline\\u0040")          # "\nline@"

请注意,ruby JSON解析器不接受裸值,因此字符串需要包装在数组或对象中。

如果无法正确解析字符串,JSON解析器也会引发错误,因此您应该添加一些错误处理代码。

答案 2 :(得分:0)

您可以使用%q{}     %q {“这是一个字符串\ n”}     => “\”这是一个字符串\ n \“”

这样它就会转义字符串字符。

来自documentation

  

有一个通用的分隔字符串和正则表达式引用语法类似于   Perl的。它看起来像%q {this}(单引号)或%Q {this}   (双引号),和%w {这是单引号词列表}。您   %Q |可以| %Q(使用)%Q ^其他^分隔符,如果你愿意。

修改 由于我误解了这个问题,我认为你最好的选择,如果你不想依赖第三方库(比如JSON),就要用适当的值替换:

  

str.gsub(/(\ n)的+ /, “\ n” 个)

答案 3 :(得分:0)

我希望有更好的选择,但知道你可以通过Kernel#eval实现这一目标很好:

literal_from_file = '"this is a string\n"'

puts literal_from_file       # print the literal first
puts eval(literal_from_file) # and then print the interpreted string

将打印:

"this is a string\n"
this is a string