我正在尝试使用以下内容运行文件(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错了?!
环境:
答案 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机器上试过这个,你的代码示例对我有用。