读取ruby 1.8.7中的字符串文件

时间:2011-04-07 06:03:40

标签: ruby string encoding

我正在尝试使用ruby 1.8.7在mac上读取.strings文件。下面是irb输出。如您所见,line是一个以/*开头的注释字符串。但是当我执行start_with命令时,当我预期它返回true时,它返回false。我怀疑所有\000都在搞乱字符串比较。

那么我该怎么做才能删除\000

f = File.open("en.lproj/Localizable.strings")
#<File:en.lproj/Localizable.strings>

line = f.readline
"/\000*\000 \000T\000h\000i\000s\000 \000i\000s\000 \000a\000 \000s\000t\000r\000i\000n\000g\000 \000c\000o\000m\000m\000e\000n\000t\000 \000*\000/\000\r\000\n"

puts line
/* This is a string comment */

line.start_with?("/* ")
false

1 个答案:

答案 0 :(得分:2)

嗯,试试显而易见的事情:

line.start_with?("/\000*\000 ")

nul字节"\000"没有任何可视化表示,所以当你puts line时你看不到它们,但如果通过{{{{}}管道你的脚本输出,你可能会看到它们1}}:

cat -v

/^@*^@ ^@T^@h^@i^@s^@ ^@i^@s^@ ^@a^@ ^@s^@t^@r^@i^@n^@g^@ ^@c^@o^@m^@m^@e^@n^@t^@ ^@*^@/^@^M^@ ^@表示零字节的方式。

更新:如果您要删除零字节,请使用trtr!

cat -v

我不确定line.tr!("\000", '') 文件的格式,因此您应该弄明白并特别指出字符串编码。看起来它可能是UTF-16但也许不是;如果它是标准的非ASCII编码,那么您将需要使用iconv来正确地整理编码。