Ruby脚本遇UTF-8无效字节序列错误:如何集成编码转换?
解决Ruby脚本UTF-8编码错误问题
当然可以把注释里的编码转换逻辑集成进去,核心思路是先将文件内容读取为二进制数据,再统一转换为UTF-8格式并替换无效字节,这样就能避免invalid byte sequence in UTF-8错误。
修改后的完整代码如下:
$VERBOSE = nil # 抑制警告 regex = /MM Membership/i dirToSearch = 'C:\TFS\**\*.sql'.gsub "\\\\","/" puts '_dirToSearch : ' + dirToSearch cc = 0 found = false Dir.glob(dirToSearch).each do |file_name| # Loop1 # 读取文件内容为二进制,再转换为UTF-8并替换无效字节 file_content = File.open(file_name, 'rb').read file_content.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '') if file_content =~ regex puts ' 2b ___Found ' + file_name + ' for [' + regex.source + ']' end end #______END Loop 1
关键修改点:
- 用
File.open(file_name, 'rb')以二进制模式读取文件,避免Ruby自动识别编码时触发错误 - 调用
encode!方法将二进制内容转换为UTF-8,通过invalid: :replace和undef: :replace参数把无效/未定义的字节替换为默认的替换字符(也可通过replace: '?'自定义替换符) - 用转换后的
file_content进行正则匹配,而非直接读取后就匹配
内容的提问来源于stack exchange,提问作者Mario Trento
相关产品推荐
相关产品推荐

