我刚刚从Ruby 1.8升级到1.9,我的大部分文本处理脚本现在都失败了,错误为invalid byte sequence in UTF-8
。我需要删除无效字符或指定Ruby应该使用ASCII编码(或者编写C stdio
函数的任何编码,这就是文件的生成方式) - 我将如何进行那些事?
最好是后者,因为(尽我所知)磁盘上的文件没有任何问题 - 如果有奇怪的,无效的字符,它们就不会出现在我的编辑器中......
答案 0 :(得分:1)
你的语言环境在shell中设置了什么?在基于Linux的系统中,您可以通过运行locale
命令进行检查,并通过以下方式对其进行更改:
$ export LANG=en_US
我的猜测是你正在使用具有UTF-8编码的语言环境设置,这导致Ruby假设文本文件是根据utf-8编码规则创建的。您可以通过尝试
来看到这一点$ LANG=en_GB ruby -e 'warn "foo".encoding.name'
US-ASCII
$ LANG=en_GB.UTF-8 ruby -e 'warn "foo".encoding.name'
UTF-8
对于Ruby 1.9中字符串编码如何变化的更一般的处理我完全建议 http://blog.grayproductions.net/articles/ruby_19s_string
(代码示例假设bash或类似的shell - C-shell派生词不同)