我正在使用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
。
答案 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")
。但是,非常感谢您的努力。