【发布时间】:2011-02-13 15:13:22
【问题描述】:
我想在我的 irb 中输入德语变音符号,但出现一个奇怪的错误。我可以毫无问题地输入äöü 的任何字符,但每个ÄÖÜß 都会导致以下错误:
$ irb
ruby-1.9.2-p136 :001 > ? # here I entered Ü but it displays only ?
/Users/lorenz/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/ruby-lex.rb:728:in
`block in lex_int2': invalid byte sequence in UTF-8 (ArgumentError)
我查看了很多关于 Ruby、rvm 和 UTF-8 的 SO 问题,但没有任何帮助。大多数都与 Rails 或数据库配置相关联。我专门检查了以下内容:
语言环境设置正确
$ locale
LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL="de_DE.UTF-8"
Terminal.app 设置为 Unicode (UTF-8) 并且 Encoding.default_external 设置正确:
$ irb
ruby-1.9.2-p136 :001 > Encoding.default_external
=> #<Encoding:UTF-8>
为什么在 Ruby 中这仍然如此困难?
【问题讨论】:
-
可能是键盘驱动问题?您是否尝试过粘贴字符而不是输入字符?
-
为了帮助对问题进行三角剖分,请将您在 IRB 中使用的命令放入源文件并让 Ruby 运行它们。这将告诉您这是 IRB 问题,还是 Ruby 本身不满意。
-
看来是 Terminal.app 的问题。我在这里遇到了与 OSX 10.6.6 相同的问号问题。但是,我可以毫无问题地在 xterm 中输入带有变音符号的大写 U。 (您可以通过启动 X11 并从“应用程序”菜单中选择“终端”来访问 xterm。)即使在此修复之后,IRB 也无法处理它:如果我输入
string = 'Ü',我会得到一个“无效的多字节字符(UTF- 8)" Ruby 错误。 -
@adamax:当我复制粘贴而不是输入时,也会发生同样的事情。
-
@the Tin Man:同样的问题,错误消息略有不同:“test.rb:1: invalid multibyte char (US-ASCII)”。在我添加“# -- encoding : utf-8 --”作为第一行后它工作正常。