5

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

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

4

1 回答 1

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 衍生物不同)

于 2010-09-10T11:12:22.413 回答