netbeans和命令中的Ruby字符编码问题wí;ndow

netbeans和命令中的Ruby字符编码问题wí;ndow,ruby,unicode,netbeans,encoding,Ruby,Unicode,Netbeans,Encoding,我使用netbeans作为开发IDE,并从cmd运行应用程序,但在cmd窗口和从netbeans运行应用程序时,在显示ISO 8859-1字符(如åäöcorrect)方面存在问题 问题:设置它的最佳实践是什么 现在我知道了 @output.puts indent + "V" + 132.chr + "lkommen till Ruby Camping!" 获得ä 我的环境 Source encoding: <Encoding:US-ASCII> Default external:

我使用netbeans作为开发IDE,并从cmd运行应用程序,但在cmd窗口和从netbeans运行应用程序时,在显示ISO 8859-1字符(如åäöcorrect)方面存在问题

问题:设置它的最佳实践是什么

现在我知道了

@output.puts indent + "V" + 132.chr + "lkommen till Ruby Camping!"
获得ä

我的环境

Source encoding: <Encoding:US-ASCII>
Default external: #<Encoding:UTF-8>
Default internal: nil
Locale charmap: "CP65001"
>chcp 65001

Active code page: 65001
>ruby main.rb

Source encoding: <Encoding:US-ASCII>
Default external: #<Encoding:UTF-8>
Default internal: nil
Locale charmap: "CP65001"
>ruby-v
ruby 1.9.1p378(2010-01-10修订版26273)[i386-mingw32]

如果要在源文件中使用非ASCII字符,则需要声明源文件的编码。源文件的第一行(或者第二行,如果有shebang行)需要是一个注释行,它(大致)与regexp匹配

#.*?coding[:=]?\s+(.*)(?:\s+.*)?
换句话说:注释行以某些内容开头,然后包含字符串
coding
,后跟一个可选符号,后跟一个有效的编码名称,后跟一些其他内容

所以,如果你把

# coding: ISO-8859-1
在你的档案顶部,你应该没事。请注意,regexp被明确设计为与Vim等编辑器兼容:

# vim: fileencoding=UTF-8 ft=ruby syn=ruby ts=2 sw=2 ai eol et si
或Emacs:

# *-* mode: ruby; coding: utf-8; tab-width: 2; indent-tabs-mode: nil *-*
有一件事总是让我感到困惑,那就是Ruby并不总是自动对字符串进行转码。您必须自己对其进行转码:

puts 'ä'
# => ä

puts 'ä'.encode($>.external_encoding || Encoding.default_external)
# => ä

谢谢,但是没有成功找到关于这个主题的链接,可能是netbeans或cmd窗口的问题,我现在的结果@salgo60:你看到我的编辑了吗?我以为Ruby会自动进行代码转换,但显然不是这样。在打印之前,您必须自己对字符串进行转码。(事实上,根据我自己的直觉以及James Edward Gray II的文章,你不应该这样做:字符串应该自动转换为IO对象的(
$>
)外部编码。我对Ruby 1.9 m17n的理解有些不太正确。)谢谢,它在我运行Ruby 1.9的命令窗口中工作,但netbeans似乎给了我一些“意外字符”源代码:#默认外部:#默认内部:nil Locale charmap:“CP850”VÃlkommen直到Ruby露营!我对此感到满意。。。。