You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:40:06