经常碰到这样的问题,会在系统中修修补补,但是这不是好的实践,大家有方法么?
有看到说有人用“utf8-cleaner”,这个靠谱不?
我下面很认真的回复了。。。。。
ICU
全部用英文
首先你要知道问题是哪里来的,源代码里面的话加一个头"encoding: utf-8",读文件的话 Encoding.default_internal = "UTF-8"
最靠谱的办法是彻底理解 byte 和 utf8 都是些什么
试试:str.unpack('C*').pack('U*')
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 挺好用,可以解决这个问题
utf8-cleaner