invalid byte sequence in GBK”问题 invalid byte sequence in UTF-8”问题

 

碰见错误:

 

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的。

好了,知晓了。

 

+

+
==

==

=

 

猜你喜欢

转载自fantaxy025025.iteye.com/blog/2223849