1

我正在使用 Apatana Studio 3.0。üde.yml 和其他文件中提供了非 ASCII 字符,例如 。他们是否需要额外的编码值?我已经 # encoding: utf-8出现在特定的控制器中,它适用于除 index.html.erb 之外的所有页面。index.html.erb 引发错误:

Encoding::CompatibilityError in Home#index
    incompatible character encodings: Windows-1252 and UTF-8 

中的翻译字符串de.yml是:

de:
    display_eula: EULA für Applikation

注意:上面的字符串在其他页面上正确呈现,它只是不适用于index.html.erb.

4

2 回答 2

2

源脚本的字符编码与对从磁盘和其他源读取的文件执行的 I/O 之间存在差异。

神奇的线条# encoding: utf-8告诉 Ruby 源文件本身具有超出正常 ASCII 范围的 UTF-8 编码字符。这让 Ruby 可以正确解释源文件中的固定字符串和多字节字符。

对于 I/O 流,您需要告诉 Ruby 如何解释传入/传出数据。IO.new及其相关方法采用一个可选参数,说明传入/传出数据流编码是什么。

从磁盘、套接字或管道读取的 YAML、JSON、HTML、XML 和其他文件类型如果不是纯 ASCII,则容易出现编码问题。Ruby 有一套非常好的工具用于即时转换,或者在字符串进入内存后进行转换。如果你不告诉 Ruby 期望什么,或者不转换成它期望的,它会抱怨,就像你看到的那样。

James Gray 有一系列文章讨论在 Ruby 中处理 Unicode 和多字节字符集。它进入了一些深水,因为这不是一个简单的话题,但他在解释事情方面做得很好。

于 2012-11-27T15:26:11.013 回答
2

问题在于来自 AWS-SimpleDB 的数据(需要将其更改为string.encode("utf-8"). 尽管如此,感谢您的努力。

于 2012-11-28T14:48:26.967 回答