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

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

能否更改问题的标题?因为答案已经与问题不符了。谢谢~ - lulalala
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衍生版本不同)


1
太好了。我想这是我的因果报应,因为我在C语言中随意使用字符串而不关心编码,或者因为我是以英语为母语的人。 - Doches
@Doches:所以,你就是那个写了所有让我不能用我的真名的应用程序的家伙。顺便说一句:承认你有问题是第一步... 咔嚓咔嚓 :-) - Jörg W Mittag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接