代码之家  ›  专栏  ›  技术社区  ›  Leonid Shevtsov

如何避免在Ruby1.9中的每个utf-8文件的顶部放置神奇的编码注释?

  •  32
  • Leonid Shevtsov  · 技术社区  · 15 年前

    我有一个Rails项目,里面有很多西里尔字母。

    它在Ruby1.8上运行得很好,但是Ruby1.9假定源文件是US ASCII编码的,除非您提供 # encoding: utf-8 源文件顶部的注释。此时不考虑文件 US-ASCII .

    有没有更简单的方法告诉Ruby“这个应用程序是UTF8编码的?除非另有声明,否则请将所有和任何包含的源文件视为utf8”?


    更新:

    我写的 How to insert the encoding: UTF-8 directive automatically in Ruby 1.9 files “如果需要,它会自动附加编码指令。

    7 回复  |  直到 14 年前
        1
  •  4
  •   Josh Lee ZZ Coder    15 年前

    显式优于隐式。写出编码的名称对于文本编辑器、解释器和任何想查看该文件的人都是很好的。不同的平台有不同的默认值——UTF-8、Windows-1252、Windows-1251等——如果您自动选择其中一个平台,那么您将妨碍可移植性或平台集成。需要更明确的编码是一件好事。

    将Rails应用程序与GetText集成可能是个好主意。然后,所有的UTF-8字符串将被隔离到少量的翻译文件中,您的Ruby模块将是干净的ASCII。

        2
  •  13
  •   Mladen Jablanović    15 年前

    我想你也可以

    1. 使用 -E utf-8 命令行参数 ruby
    2. 设置你的 RUBYOPT 环境变量到 "-E utf-8"
        3
  •  12
  •   the Tin Man    14 年前

    在我看来,显性并不总是比隐性好。

    当您使用的几乎所有源代码都与UTF-8兼容时,您可以通过使用Ruby轻松地避免放置神奇的编码注释。 -Ku 命令行选项。

    不要混淆 u “的参数 -K 选项与 -U 选项。

    -Ku : set internal and script encoding to utf-8
    -U  : set internal encoding to utf-8
    

    然后,只在需要的脚本中设置magic编码注释。记住,约定胜过配置!

    您可以设置环境变量 RUBYOPT=-Ku

    参见Ruby的命令行选项 http://www.manpagez.com/man/1/ruby/ .

        4
  •  4
  •   Matthieu Sadouni    15 年前

    在Rails项目中,有一个gem可以在每个需要它的文件的顶部设置magic注释: https://github.com/m-ryan/magic_encoding

    你只需安装并运行 magic_encoding 在你的项目的基础上,问题解决了。

        5
  •  3
  •   Michael Kohl    15 年前

    这不是一个直接的答案,但根据您的编码环境,您可以让编辑器处理一些事情。Emacs ruby-mode 例如,有一个变量 ruby-insert-encoding-magic-comment :

    ruby insert编码magic comment是 在“ruby mode.el”中定义的变量 它的价值是T

    文档: *如果不为零,则在保存时插入一个神奇的emacs“编码”注释。

    您可以自定义此变量。

    我相信其他编辑也有类似的东西。当然,这仍然意味着要为每个文件添加魔法注释,但至少编辑器会自动为您添加,而不必记住。

        6
  •  1
  •   Arnaud Meuret    15 年前

    唯一的万无一失(而且是干的!)1.9确保所有文件(源文件和资产)在运行时使用首选编码加载的方法是使用-e命令行参数。

    根据您的系统,所有其他方法都有缺点(例如,不可能设置env vars,首先加载的第三方代码不适合使用 Encoding.default_external ,……)

    我的生产服务器使用以下包装脚本:

    #!/bin/bash
    exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "$@"
    

    (确保适应路径)

        7
  •  0
  •   Brian    15 年前

    我不会遇到这么多问题,但是当我需要确保UTF-8时,我使用$kcode global。尝试将其放入您的环境中。rb: $KCODE = 'UTF8'

    另外,您确定编辑器正在以UTF-8格式保存文件吗?

    推荐文章