Ruby on rails 3 RubyonRails中UTF-8与ASCII-8BIT编码的不一致性
我知道有很多关于rails和编码的问题,但是我还没有找到关于这个特定问题的任何东西 我有一个RubyonRails应用程序,它使用Ruby on rails 3 RubyonRails中UTF-8与ASCII-8BIT编码的不一致性,ruby-on-rails-3,encoding,utf-8,ruby-on-rails-3.1,i18n-gem,Ruby On Rails 3,Encoding,Utf 8,Ruby On Rails 3.1,I18n Gem,我知道有很多关于rails和编码的问题,但是我还没有找到关于这个特定问题的任何东西 我有一个RubyonRails应用程序,它使用Rails3.1.3,并在JRuby1.6.7下运行。我们支持英语和法语,我们使用I18nlibrary/gem来实现这一点 翻译文件部分示例: #---- config/locales/en.yml ---- en: button_label_verify: "Verify" #---- config/locales/fr.yml ---- fr: but
Rails3.1.3
,并在JRuby1.6.7
下运行。我们支持英语和法语,我们使用I18n
library/gem来实现这一点
翻译文件部分示例:
#---- config/locales/en.yml ----
en:
button_label_verify: "Verify"
#---- config/locales/fr.yml ----
fr:
button_label_verify: "Vérifier"
在某些情况下,我会遇到以下编码错误:
Internal Server Error: Encoding::CompatibilityError incompatible character encodings: UTF-8 and ASCII-8BIT
案例1:
#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....
#---- app/helpers/page_helper.rb ----
def get_button_label
return I18n.t(:button_label_verify)
end
#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....
#---- app/helpers/page_helper.rb ----
def get_button_label
return "#{I18n.t(:button_label_verify)}"
end
#---- app/views/_view_page.html.erb ----
.....
<h3><%= "#{I18n.t(:button_label_verify)}" %></h3>
....
注:上述情况也不会导致错误-编码问题仅在计算的I18n翻译在引号中时出现
案例3:
#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....
#---- app/helpers/page_helper.rb ----
def get_button_label
return I18n.t(:button_label_verify)
end
#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....
#---- app/helpers/page_helper.rb ----
def get_button_label
return "#{I18n.t(:button_label_verify)}"
end
#---- app/views/_view_page.html.erb ----
.....
<h3><%= "#{I18n.t(:button_label_verify)}" %></h3>
....
#----app/views/_view_page.html.erb----
.....
....
这不会导致错误。。。因此,这个问题似乎与字符串中的动态代码(带有法语字符)有关,而不是打印出从helper函数返回的字符串
我知道如何解决这个问题/修复它-但我想知道的是,是否有人能提供一些关于为什么会这样的见解-这种方式有什么好的理由吗?在我看来,当你进入低级时,打印一个字符串就是打印一个字符串,所以我不明白一种方法是如何导致错误的,而另一种方法是如何导致错误的。
#encoding: utf-8
在包含ascii扩展字符的文件顶部,应修复编码相关问题(在elast,来自项目文件的问题…)
我不知道为什么在使用插值时,它对助手不起作用…
#encoding: utf-8
在包含ascii扩展字符的文件顶部,应修复编码相关问题(在elast,来自项目文件的问题…)
我不知道为什么在使用插值时它不能在助手上工作…有时需要为文件设置KCODE环境变量(这对于ruby 1.8的兼容性很重要): 也可能是您的文件没有用UTF-8编码。为此,您需要的不仅仅是纯文本标题。在Eclipse中,当保存为文件时,它隐藏在“首选项->常规->编辑器->拼写”和“记事本”以及大多数Windows程序下。
enca
命令是在Linux上执行此操作的一种方法,但我相信还有其他方法。我无法计算我看到一个文件说它是UTF-8的次数,但实际上它是一些其他编码,因为UTF-8函数像ASCII一样用于8位字符,所以在十六进制编辑器中检查标题之前,您通常不会注意到问题
请花些时间阅读有关文件编码的内容:
这对于正确操作非常重要,并且可以在以后移植到东亚语言时为您省去很多麻烦(您应该始终计划这样做!)有时您需要为文件设置KCODE环境变量(这对于ruby 1.8的兼容性很重要): 也可能是您的文件没有用UTF-8编码。为此,您需要的不仅仅是纯文本标题。在Eclipse中,当保存为文件时,它隐藏在“首选项->常规->编辑器->拼写”和“记事本”以及大多数Windows程序下。
enca
命令是在Linux上执行此操作的一种方法,但我相信还有其他方法。我无法计算我看到一个文件说它是UTF-8的次数,但实际上它是一些其他编码,因为UTF-8函数像ASCII一样用于8位字符,所以在十六进制编辑器中检查标题之前,您通常不会注意到问题
请花些时间阅读有关文件编码的内容:
这一点非常重要,要做到正确,它可以帮你在以后移植到东亚语言时省去很多痛苦(你应该一直计划这样做!)嘿,安东尼-谢谢你的回复!我们已经尝试过很多次了(将
#encoding:utf-8
放在这些文件的顶部…问题仍然存在。我认为这是因为文件本身并不包含扩展字符(那些在YAML文件中)-但是扩展字符被计算成一个ruby字符串-这似乎就是issueYeah,我的意思是,你必须把它放在yaml文件中,而不是helper中…你也试过了吗?是的!一直都是这样:)我们还添加了以下内容,没有什么不同(在environment.rb中):Encoding.default\u external=Encoding::UTF\u 8 Encoding.default\u internal=Encoding::UTF\u 8
我刚刚在我的一个应用程序中尝试过,它工作正常,但是,我在MRI 1.9.3中。。。可能是jRuby特有的…嘿,安东尼-谢谢你的回复!我们已经尝试过很多次了(将#encoding:utf-8
放在这些文件的顶部…问题仍然存在。我认为这是因为文件本身并不包含扩展字符(那些在YAML文件中)-但是扩展字符被计算成一个ruby字符串-这似乎就是issueYeah,我的意思是,你必须把它放在yaml文件中,而不是helper中…你也试过了吗?是的!一直都是这样:)我们还添加了以下内容,没有什么不同(在environment.rb中):Encoding.default\u external=Encoding::UTF\u 8 Encoding.default\u internal=Encoding::UTF\u 8
我刚刚在我的一个应用程序中尝试过,它工作正常,但是,我在MRI 1.9.3中。。。可能是jRuby特定的。。。