Ruby 1.9.2:irb throws ArgumentError:输入德语变音时,UTF-8中的字节序列无效

时间:2011-02-13 15:13:23

标签: ruby macos utf-8 irb

我想在我的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中这仍然很难?

3 个答案:

答案 0 :(得分:2)

通常您使用# coding: UTF-8为文件设置编码。

如果是irb,可能需要事先明确地设置它:

irb -E UTF-8:UTF-8

这将在irb上将内部和外部编码设置为UTF-8。

或者另外尝试

irb -U

将内部编码设置为UTF-8。

答案 1 :(得分:2)

我不知道如何解决这个问题,但肯定的是这只是一件事,我注意到很多时候irb有自己独特的处理用户的输入(它甚至可能是读取线的限制)它只适用于某些角色。

你可以做一个简单的测试来检查一下,用:

创建一个新的rb文件
# encoding: utf-8
puts "test: Ü"

并执行它,它有效吗?

虽然它仍然是一个令人讨厌的问题,但对我来说这不是一个足够大的问题,直到现在才开始寻找解决方案。

答案 2 :(得分:0)

如果您在Mac OS上运行,则可能是readline问题。请参阅http://henrik.nyh.se/2008/03/irb-readline