把法文(重音)字符放在Ruby文件中

可能重复:
无效的多字节字符(US-ASCII)与Rails和Ruby 1.9

我怎么能把法文字符放在一个Ruby文件中? 这是一个错误:

SyntaxError in ArticlesController#show /.../app/controllers/articles_controller.rb:47: invalid multibyte char (US-ASCII) /.../app/controllers/articles_controller.rb:47: invalid multibyte char (US-ASCII) /.../app/controllers/articles_controller.rb:47: syntax error, unexpected $end, expecting '}' ...@article, notice: 'Article a été créé avec succes.' } 

在一个HTML文件中,把这个放在头上,口音工作:

 <!DOCTYPE html> <head> <meta http-equiv="content-type" content="text/html"; charset="utf8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <!-- ... autres mentions de l'entête de fichier ... --> </head> 

Ruby有一个特殊的语法来声明一个文件的字符集:如果你使用的是多字节字符,你可以在文件的最顶端使用这一行,没有前面的空格

 # encoding: utf-8 

从Ruby 1.9开始,Strings总是附加一个编码。 所以Ruby可以正确处理多字节字符,并能够在不同的编码之间进行转换。 以前的Ruby版本基本上把字符串作为字节数组来处理,这使得几乎不可能正确处理多重编码。

默认情况下,Ruby 1.9使用US_ASCII编码,而Ruby 2.0以后默认使用UTF-8。

一般来说,如果你正在运行Ruby 1.9,你只需要改变任何东西。 如果您的编辑器保存UTF-8文件,并且运行的是Ruby> = 2.0,则默认情况下一切正常。

尽管如此,在1.9以后的所有Ruby版本中,您可以更改使用的编码。 有三种不同的默认编码可以设置(默认情况下,默认使用相应的Ruby默认编码,例如1.9中的US_ASCII ,Ruby 2.0和更高版本中的UTF-8 ):

  • 内部编码 :将所有字符串的默认编码转换为。 这是字符串内部保存的编码。
  • 外部编码 :当读取文件时,假定它们是在该编码中。
  • 源代码编码 :假设用这种编码写入ruby源代码

前两种编码可以像这样设置

 Encoding.default_internal = 'UTF-8' Encoding.default_external = 'UTF-8' 

然后在当前Ruby进程生命周期的所有操作中使用它们。

源代码可以在ruby文件的第一行(或者在shebang下面)使用“魔法注释”来设置

 # encoding: UTF-8 

或者使用ruby -KU启动你的脚本,这也将默认编码设置为UTF-8。 你也可以在你的榜单中设置。 在您的具体情况下,您必须至少使用提供的机制之一设置源编码。

请参阅http://graysoftinc.com/character-encodings ,尤其是http://graysoftinc.com/character-encodings/ruby-19s-three-default-encodings,以获取更多关于Ruby 1.9中字符串编码的信息和背景信息。

你使用哪种编码?

您可以在标题中定义源文件的编码。 或者更好:如果使用ASCII以外的字符,则必须定义它。

Alex已经提到了

 #encoding: utf-8 

如果您不使用UTF-8,而是使用您当地的法语代码页,则可以在源代码的第一行使用此标题:

 #encoding: cp1252 

当您读取并保存文件时,您可能会遇到其他编码错误。 详情可以在http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings找&#x5230;