我正在使用Apatana Studio 3.0de.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
。 最佳答案
源脚本的字符编码和从磁盘和其他源读取的文件上执行的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和多字节字符集因为这不是一个容易的话题,但他解释事情做得很好。
关于ruby-on-rails - 不兼容的字符编码:Windows-1252和UTF-8 yml文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13586834/