碰见错误:
test.rb:8:in `match': invalid byte sequence in GBK (ArgumentError)
from test.rb:8:in `block in <main>'
from test.rb:6:in `each'
from test.rb:6:in `<main>'
原因:
平时习惯在文件头部加入# encoding: utf-8 没用的。
理论总是在问题的时候才能闪光。
看此文。Ruby1.9之字符串内编码和外编码
解决方法:
假如外部文件是utf-8编码。
* 读文件的时候指定外编码:utf-8。 lines = File.readlines('xxx\origin3.txt', :external_encoding => "UTF-8")
* 行内转码:line.force_encoding("UTF-8")#是修改内编码为UTF8
* file=File.new(fr).tap{|f|f.set_encoding'utf-8','GBK'}
* set_encoding 'utf-8','GBK‘ #是将字节流转换成GBK格式的(外编码仍为UTF8)
* f = File.open 'environment.rb', 'r:gbk' # 如果是 utf-8 编码,就用 'r:utf-8'
f = File.open 'environment.rb', 'r:gbk:utf-8' # 如果是 utf-8 编码,就用 'r:utf-8'
为什么很多人出现此问题?
win7下:
puts "Encoding.default_external=#{Encoding.default_external}"
puts "Encoding.default_internal=#{Encoding.default_internal}"
win7下默认输出:
Encoding.default_external=GBK
Encoding.default_internal=
看见了默认是认为外部编码gbk,但我们一般的习惯文件是utf-8的。
好了,知晓了。
+
+
==
==
=