在UTF-8环境中使用Ruby 1.9读取ASCII编码的文件

时间:2010-09-10 10:33:44

标签: ruby encoding utf-8 ascii ruby-1.9

我刚刚从Ruby 1.8升级到1.9,我的大部分文本处理脚本现在都失败了,错误为invalid byte sequence in UTF-8。我需要删除无效字符或指定Ruby应该使用ASCII编码(或者编写C stdio函数的任何编码,这就是文件的生成方式) - 我将如何进行那些事?

最好是后者,因为(尽我所知)磁盘上的文件没有任何问题 - 如果有奇怪的,无效的字符,它们就不会出现在我的编辑器中......

1 个答案:

答案 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派生词不同)