不兼容的字符编码:Windows-1252和UTF-8 yml文件

时间:2012-11-27 14:52:05

标签: ruby-on-rails ruby utf8-decode

我正在使用Apatana Studio 3.0。 de.yml和oher文件中提供了非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

2 个答案:

答案 0 :(得分: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有一系列articles讨论在Ruby中处理Unicode和多字节字符集。它进入了一些深水,因为它不是一个容易的主题,但他做了很好的解释事情。

答案 1 :(得分:2)

问题在于来自AWS-SimpleDB的数据(需要更改为string.encode("utf-8")。但是,非常感谢您的努力。