Ruby 有没有终极方案解决 “invalid byte sequence in UTF-8”?

iamroody · 2013年11月22日 · 最后由 Thomastar 回复于 2018年07月17日 · 13832 次阅读

经常碰到这样的问题,会在系统中修修补补,但是这不是好的实践,大家有方法么?

有看到说有人用“utf8-cleaner”,这个靠谱不?

我下面很认真的回复了。。。。。

全部用英文

首先你要知道问题是哪里来的,源代码里面的话加一个头"encoding: utf-8",读文件的话 Encoding.default_internal = "UTF-8"

最靠谱的办法是彻底理解 byte 和 utf8 都是些什么

试试:str.unpack('C*').pack('U*')

5 楼正解,花几个小时理解下编码,以及 ruby 中 encode, force_encoding, unpack, pack 的用法,更多可以看看其他语言编码的处理,就不会需要“终极方案”了。

发现 Iconv 除了一个提示,昨晚写代码的时候正好遇到这个问题了,分享下代码:

# http://www.redmine.org/projects/redmine/repository/revisions/11440/diff/trunk/lib/tasks/migrate_from_mantis.rake
if @charset
    if RUBY_VERSION < '1.9'
        str = Iconv.iconv("UTF-8//IGNORE", "#{@charset.upcase}//IGNORE", line) 
    else
          str = line.to_s.force_encoding(@charset.upcase).encode('UTF-8')
    end
end

utf8-cleaner 挺好用,可以解决这个问题

需要 登录 后方可回复, 如果你还没有账号请 注册新账号