后来观察发现我的文件的编码方式是 UTF8 的,也就是外编码(external encoding)是 UTF8,读进来后的内编码(internal encoding)是 GBK 的。match 把一个 UTF8 的字节流当成 GBK 去处理,然后问题就出现了。
line.force_encoding("UTF-8") #是修改内编码为UTF8 set_encoding 'utf-8','GBK‘ #是将字节流转换成GBK格式的(外编码仍为UTF8)
#1 楼 @nightire 谢谢 nightire 的回答。昨天试了下在 match 前添加下面代码解决了问题。
line.force_encoding("UTF-8")
然后又试了下你给的方法。读文件时使用下面代码:
file = File.new(fr).tap{|f| f.set_encoding 'utf-8','GBK'}