Ruby和重音字符

6
以下是内容翻译的结果:

以下是一篇冗长的文章总结:如何在Ruby中显示带重音符号的字符(使它们能够通过puts等函数正常工作)?


你好!我正在为我的班级编写一个程序,将显示一些西班牙语句子。当我尝试在Ruby中使用带重音符号的字符时,它们无法正确显示(无论是在NetBeans输出窗口(Java中可以正常显示带重音符号的字符),还是在命令提示符中)。

起初,我的一些代码甚至都无法运行,因为数组中的带重音符号的字符会打乱Ruby解释器(我猜?)。我遇到了一些错误,就好像Ruby期望有一个闭合括号。

但是我进行了一些研究,并找到了解决方案,只需在Ruby文件开头添加以下代码即可:

# coding: utf-8

在NetBeans中,无论是否添加此行,我的程序都可以运行。但是我需要添加这行才能使我的程序在命令提示符中成功运行。(我不知道为什么。)

然而,我仍然遇到了实际显示这些字符的问题。例如,“será”这个单词在NetBeans的输出窗口中会显示为“seré”。在命令提示符中,它会绘制一些小的管道字符(我不知道如何输入这些字符)。

经过更多的研究,我了解到:

$KCODE = 'UTF-8'

但我使用它时没有任何运气。


我正在使用Ruby 1.8和1.9(在不同的机器之间切换)。

谢谢, Derek


顺便提一下,它是 # encoding: utf-8。你使用哪个操作系统? - Vasiliy Ermolovich
它似乎以相同的方式工作。我正在运行OSX和Windows 7。我在两者上都尝试过,仍然没有找到答案。 - Derek
1个回答

3

在Windows 7中,默认情况下命令提示符采用点阵字体,并不支持Unicode。首先,您应将cmd字体更改为Lucida ConsoleConsolas。然后使用chcp 65001更改命令提示符的代码页。您可以手动执行此操作,也可以将此行添加到Ruby程序中:

# encoding: utf-8
`chcp 65001` #change cmd encoding to unicode
puts 'será test '

我不理解的是:如果我在Java中工作,NetBeans输出控制台将显示带重音的字符。但在Ruby中,它会显示错误的字符;即使使用您的代码也是如此。 - Derek
此外,当我在cmd中更改字体时,现在它会显示正确的字符,但是有些奇怪。例如:será将在á之后立即显示一个带问号的方框,似乎具有重音符号后面有一个字母的字符(例如serás)会显示为该字母复制两次(seráss)。 - Derek
对不起,我对NetBeans一无所知。关于Windows cmd,我也注意到了这种奇怪的情况。有一个小技巧:如果你在单词后面输入一个空格(puts 'será'),一切都会好起来。虽然我不知道为什么会出现这种情况,但这个方法或许能够帮到你。 - Vasiliy Ermolovich
它在我的cmd中可以工作,但最新的netbeans版本呢?使用# coding: utf-8它是否正确打印? - Junior Mayhé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接