我有一个以UTF-16LE编码的自动生成的文件,我想编写一个Ruby脚本,通过正则表达式搜索版本号,并用新的版本号替换它。这是我最初尝试使用的内容:
File.open(filepath,"rb:UTF-16") do |file|
file.each do |line|
line.gsub!(/FILEVERSION \d\.\d/,FILEVERSION)
end
end
然而,这不起作用,因为我收到一条错误消息,表示"不兼容的编码正则表达式匹配(US-ASCII regexp与UTF-16字符串)"。我试图在UTF-16中强制编码我的FILEVERSION字符串,但是得到了同样的错误。我的一位同事说,你不能有效地使用UTF-16编码的正则表达式。这个问题有解决方法吗?
答案 0 :(得分:1)
如果您小心地用UTF-16LE编码所有内容,它应该可以工作。
re = Regexp.new('FILEVERSION \d\.\d'.encode('UTF-16LE'))
File.open(filepath,"rb:UTF-16LE") do |file|
file.each do |line|
line.gsub!(re, FILEVERSION.encode('UTF-16LE'))
end
end