我刚从Ruby 1.8升级到1.9,我的大部分文本处理脚本现在都会出现错误“invalid byte sequence in UTF-8”。我需要剥离无效字符或指定Ruby使用ASCII编码(或C stdio函数写入文件时使用的任何编码),该如何做呢?
最好是后者,因为(就我所知)磁盘上的文件没有问题——如果有奇怪的无效字符,它们不会出现在我的编辑器中...
最好是后者,因为(就我所知)磁盘上的文件没有问题——如果有奇怪的无效字符,它们不会出现在我的编辑器中...
你的 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衍生版本不同)