require 'iconv'
require 'rchardet19'
def encode(string)
cd = CharDet.detect(string)
if cd.confidence > 0.6
string = Iconv.conv("UTF-8//IGNORE", "#{cd.encoding}//IGNORE", string)
end
string.force_encoding("utf-8")
end
或者说能不能生效?如果不能,问题在哪里?
require 'rchardet19'
def encode(string)
cd = CharDet.detect(string)
if cd.confidence > 0.6
string.force_encoding(cd.encoding)
end
string.encode("utf-8", :undef => :replace, :replace => "?", :invalid => :replace)
end
#1 楼 @hooopo 看来这个先后顺序被我搞混了,虽然探测到是 gb2312 之类的,但是实际上它本身还是 ascii 字符序列。所以先 force_encoding 再 conv 才是正确的顺序。
thx @hoooooooooopo 大神。
我觉得大家都在误用 force encoding 呀 force encoding 只改变字符的编码标记,并不真正改变字符的编码 encode 才改变编码,但是必须知道本来是什么编码
#14 楼 @Saito 这里有史上最全的 关于 ruby 编码的博客,看了两天才看完... http://blog.grayproductions.net/articles/understanding_m17n