【问题标题】:Reading ASCII-encoded files with Ruby 1.9 in a UTF-8 environment在 UTF-8 环境中使用 Ruby 1.9 读取 ASCII 编码的文件
【发布时间】:2011-04-10 16:18:18
【问题描述】:

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

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

【问题讨论】:

  • 是否可以更改问题的标题?因为答案不再是问题了。干杯~

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


【解决方案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 衍生品不同)

【讨论】:

  • 优秀。我想这是我对 C 中的字符串不关心编码或以英语为母语的人的业力惩罚。
  • @Doches:所以,你是编写所有那些不允许我使用我的真实姓名的应用程序的人。顺便说一句:承认你有问题是第一个...... bla bla bla :-)
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2014-06-19
  • 2011-03-14
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多