即使使用Magic Comment,Ruby UTF-8编码在Windows中也不起作用

时间:2012-02-24 14:39:00

标签: ruby windows encoding

我正在尝试使用以下内容运行文件(cmd提示符中的ruby anyfile.rb):

# encoding: utf-8
puts 'áá'

发生以下错误:

invalid multibyte char (UTF-8)

Ruby似乎不理解魔术评论......

编辑:如果我删除“#encoding:utf-8”并运行如下命令提示符:

ruby-E:UTF-8 encoding.rb

然后它有效 - 任何想法?

EDIT2:,当我跑:

ruby -e 'p [Encoding.default_external, Encoding.default_internal]'

我有 [#编码:CP850,无] ,也许我的Encoding.default_external错了?!

环境:

  • Windows XP(是的,我也讨厌windows + ruby​​)
  • ruby​​ 1.9.2p180(2011-02-18)[i386-mingw32]

4 个答案:

答案 0 :(得分:3)

我相信这是一个典型的案例,“如果你听到蹄子,想马,不是斑马”。

错误消息告诉您文件中的字节序列不是有效的UTF-8多字节序列。

绝对有可能

  

Ruby似乎不理解魔术评论......

正如你所说,到目前为止,没有人注意到魔法评论实际上并不起作用,因为你是人类历史上第一个真正尝试使用魔法评论的人。 (实际上,这可能。如果Ruby 没有理解魔术评论,它会抱怨无效的 ASCII 字符,因为ASCII是如果没有魔术评论,则为默认编码。)

或者,实际上 是文件中无效的多字节UTF-8序列。

您认为哪个更有可能?如果我是你,我会检查我的档案。

答案 1 :(得分:2)

我不时遇到类似的问题,文件没有保存为UTF-8,即使魔术评论也是如此。

我发现Ruby 1.9.2存在将UTF-8正确转换为代码页850和437的问题,这是Windows上命令提示符的默认设置。

我建议您升级到Ruby 1.9.3(最新版本为patchlevel 125),它解决了很多编码问题,特别是在Windows上。

另外,要验证您保存的文件是否包含Unicode BOM(因此它是纯UTF)并且已正确保存。

要验证这一点,您可以将控制台中的代码页切换为unicode(chcp 65001)并尝试type myscript.rb

你应该正确看到重音字母。

最后但同样重要的是,确保您的命令提示符使用TrueType字体,以便正确显示扩展字符。

希望有所帮助。

答案 2 :(得分:0)

尝试

# encoding: iso-8859-1

并非所有文字都是utf8。

答案 3 :(得分:0)

在记事本中保存文件时,您确定从编码下拉列表中选择了“UTF-8”吗?我刚刚在XP机器上试过这个,你的代码示例对我有用。