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

时间:2012-01-09 23:03:34

标签: ruby linux ruby-on-rails-3 ubuntu

  

可能重复:
  invalid multibyte char (US-ASCII) with Rails and 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>

3 个答案:

答案 0 :(得分:6)

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

# encoding: utf-8

答案 1 :(得分:5)

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

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

通常,如果您运行的是Ruby 1.9,则只需要更改任何内容。如果您的编辑器保存了UTF-8文件并且您运行的是Ruby&gt; = 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。你也可以在shebang中设置它。在您的特定情况下,您必须至少使用提供的机制之一设置源编码。

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

答案 2 :(得分:0)

您使用哪种编码?

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

Alex已经提到了

#encoding: utf-8

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

#encoding: cp1252

当您阅读并保存文件时,可能会遇到其他编码错误。详细信息可在http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings

中找到