Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby UTF-8编码不';即使有神奇的注释,也不能在Windows中工作_Ruby_Windows_Encoding - Fatal编程技术网

Ruby UTF-8编码不';即使有神奇的注释,也不能在Windows中工作

Ruby UTF-8编码不';即使有神奇的注释,也不能在Windows中工作,ruby,windows,encoding,Ruby,Windows,Encoding,我正在尝试运行一个包含以下内容的文件(cmd提示符中的ruby anyfile.rb): # encoding: utf-8 puts 'áá' 发生以下错误: invalid multibyte char (UTF-8) Ruby似乎不理解这个神奇的评论 编辑:如果我删除“#编码:utf-8”并按如下方式运行命令提示符: ruby-E:UTF-8 encoding.rb 那就行了-有什么想法吗 EDIT2:当我运行时: ruby -e 'p [Encoding.default_exter

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

# encoding: utf-8
puts 'áá'
发生以下错误:

invalid multibyte char (UTF-8)
Ruby似乎不理解这个神奇的评论

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

ruby-E:UTF-8 encoding.rb
那就行了-有什么想法吗

EDIT2:当我运行时:

ruby -e 'p [Encoding.default_external, Encoding.default_internal]'
我得到了[#编码:CP850,nil],也许我的编码。默认值\u外部错误

环境:

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

# encoding: iso-8859-1

不是所有的文本都是utf8。

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

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

绝对有可能

Ruby似乎不理解这个神奇的评论

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

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


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

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

对于未保存为UTF-8的文件,我有时也会遇到类似的问题,即使magic comment如此声明

我发现Ruby 1.9.2在正确地将UTF-8转换为代码页850和437(Windows上的默认命令提示符)方面存在问题

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

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

要验证这一点,您可以将控制台中的代码页切换到unicode(
chcp 65001
),然后尝试
键入myscript.rb

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

最后但并非最不重要的一点是,确保命令提示符使用TrueType字体,以便正确显示扩展字符


希望有帮助。

这对你有帮助吗?不幸的是没有。我使用记事本创建了该文件。您确定它将该文件安全设置为utf-8吗?我如何在记事本或windows中的其他编辑器中执行此操作?单击“另存为”,应该会有一个下拉框,允许您选择编码。不再发生错误,但输出不正确。它是这样的:“ßß”而不是“áá”。好的,我在记事本中创建了一个新文件并保存为UTF-8。提示中的输出为:├ í├ í". 在您执行的测试中,结果是:“áá”?请问,您的输出是什么?ruby-e'p[Encoding.default\u external,Encoding.default\u internal]'好的,谢谢!如果我删除“#encoding:utf-8”并像这样运行命令提示符:“ruby-E:utf-8 encoding.rb”-那么它可以工作-有什么想法吗?