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

Ren*_*ené 4 ruby linux ubuntu ruby-on-rails-3

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

如何将法语字符放在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.' }
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 6

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

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)


Hol*_*ust 5

从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默认编码,即US_ASCII1.9 UTF-8及更高版本,在Ruby 2.0和更新版本上):

  • 内部编码:将所有字符串的默认编码转换为.这是字符串在内部保存的编码.
  • 外部编码:在读取文件时,假设它们处于该编码状态.
  • source encoding:假设要使用此编码编写ruby源代码

前两种编码可以这样设置

Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
Run Code Online (Sandbox Code Playgroud)

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

可以使用ruby文件的第一行(或shebang下面)中的"魔术注释"来设置源编码,如此

# encoding: UTF-8
Run Code Online (Sandbox Code Playgroud)

或者通过启动您的脚本使用ruby -KU它也将默认编码设置为UTF-8.你也可以在shebang中设置它.在您的特定情况下,您必须至少使用提供的机制之一设置源编码.

有关Ruby 1.9中字符串编码的更多信息和背景,请参阅http://graysoftinc.com/character-encodings,特别是http://graysoftinc.com/character-encodings/ruby-19s-three-default-encodings.