替换UTF-16LE编码文件中的字符串

时间:2014-07-21 18:18:01

标签: ruby regex encoding utf-16

我有一个以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编码的正则表达式。这个问题有解决方法吗?

1 个答案:

答案 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
相关问题