【问题标题】:Ruby 1.9.2: irb throws ArgumentError: invalid byte sequence in UTF-8 when entering German UmlautRuby 1.9.2:irb 抛出 ArgumentError:输入德语变音符号时 UTF-8 中的无效字节序列
【发布时间】: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 --”作为第一行后它工作正常。

标签: ruby macos utf-8 irb


【解决方案1】:

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

如果是irb,可能需要提前明确设置:

irb -E UTF-8:UTF-8

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

或者另外尝试

irb -U

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

【讨论】:

  • 我尝试了这两个命令但得到相同的结果:无效的字节序列:-(
【解决方案2】:

我不知道如何解决这个问题,但可以肯定的是,这只是 irb 的事情,我注意到很多时候 irb 在处理用户输入方面有其独特之处(它甚至可能是 readline 的一个限制)它只适用于某些字符。

你可以做一个简单的测试来检查,创建一个新的 rb 文件:

# encoding: utf-8
puts "test: Ü"

并执行它,它有效吗?

虽然这仍然很麻烦,但直到现在我还没有足够大的问题来真正寻找解决方案。

【讨论】:

  • 我已经尝试过了,但是对于您的文件,错误仍然存​​在:test.rb:1: invalid multibyte char (US-ASCII)。这似乎不是 IRB 问题。
  • 在脚本的第一行添加“# encoding: utf-8”。
  • 如何将其添加到您的答案中? :)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2012-12-11
    • 2023-04-03
    • 2015-07-04
    • 2016-07-05
    • 2013-08-20
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多