Ruby on rails 3 Rails utf-8问题
我不熟悉ruby(和rails),在字符串中使用瑞典语字母时遇到som问题。在我的操作中,创建如下实例变量:Ruby on rails 3 Rails utf-8问题,ruby-on-rails-3,character-encoding,Ruby On Rails 3,Character Encoding,我不熟悉ruby(和rails),在字符串中使用瑞典语字母时遇到som问题。在我的操作中,创建如下实例变量: @title = "Välkommen" 我得到以下错误: invalid multibyte char (US-ASCII) syntax error, unexpected $end, expecting keyword_end @title = "Välkommen" ^ 发生了什么事 编辑:如果我添加: # coding: utf-8 在我的控制器
@title = "Välkommen"
我得到以下错误:
invalid multibyte char (US-ASCII)
syntax error, unexpected $end, expecting keyword_end
@title = "Välkommen"
^
发生了什么事
编辑:如果我添加:
# coding: utf-8
在我的控制器顶部,它工作。这是为什么?我该如何解决这个“问题”?参见乔尔·斯波尔斯基的文章 请简要引用回答此问题的部分 关于编码的一个最重要的事实 如果你完全忘记了我刚才解释的一切,请记住 一个极其重要的事实。有一个字符串是没有意义的 不知道它使用什么编码。你不能再坚持你的观点了 把头埋在沙子里,假装“纯”文本是ASCII码 这就是为什么您必须告诉ruby文件中使用了什么编码。由于编码没有在与您的文件相关联的某种元数据中进行标记,因此一些软件假定为ASCII,直到它知道更多为止。Ruby 1.9可能会一直这样做,直到您的注释停止,并重新开始读取文件,现在将其解码为utf-8 显然,如果您对ruby文件使用了其他Unicode编码或其他一些本地编码,则需要更改注释以指示正确的编码。ruby 1.9中的“神奇注释”(Rails 3基于此)告诉解释器预期的编码。这很重要,因为在Ruby1.9中,每个字符串都有一个编码。在1.9之前,每个字符串都只是一个字节序列 詹姆斯·格雷(James Gray)关于Ruby和Unicode的一系列博客文章很好地描述了这个问题。与您的问题完全相关的是(但请查看其他问题,因为它们非常好) 文章的要点是: 第一个是源代码编码的主要规则:除非您另有说明,否则源文件将接收US-ASCII编码
有几个地方可能会导致utf-8编码出现问题。 但要解决这个问题需要一些技巧:
class ApplicationController
为每个请求设置
内容类型
标题是一个坏主意,因为某些响应可能不是文本/html
格式。在每个请求上设置该标题会产生一个良好的默认值,其他请求可以覆盖该默认值+1对于Rails 3+,使用response.headers['Content-Type']
而不是@headers[“Content-Type”]
Potential Gotcha:Rails 3中application.rb
的这一行:config.encoding=“utf-8”
仅适用于模板。
development:
adapter: mysql
encoding: utf8
class ApplicationController < ActionController::Base
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end