“In,ü,ö,ß的无效多字节字符(US-ASCII)”错误是Ascii!

时间:2010-08-14 17:29:37

标签: ruby encoding ascii

我的应用程序需要处理一些国际字符,即ä,ü,ö和ß,它们仍然是ascii。

当我在处理这些字符时测试ruby的行为时,我收到了这个错误:

test.rb:1: invalid multibyte char (US-ASCII)
test.rb:1: invalid multibyte char (US-ASCII)

代码:

puts "i like my chars: ä, ü, ö and ß!"

但奇怪的是:当使用交互式Ruby Shell时,我没有收到任何错误!

编辑:在我的应用程序中,我正在从外部api中检索数据。上面的代码只是一个例子!

6 个答案:

答案 0 :(得分:11)

不,这些字符在ASCII中不是。 ASCII没有任何高于Unicode U + 007F(十进制127)的值。有关详细信息,请参阅wikipedia ASCII entry

我怀疑交互式Ruby shell采用shell的本机编码,而不是ASCII。

您是否有办法指定.rb文件的编码?如果是这样,请使用 - 或更改脚本,使其真正 ASCII。

答案 1 :(得分:8)

将魔术评论# coding: utf-8放在脚本的开头(如果你使用的是shebang,则放在第二行)。

#!/usr/local/bin/ruby
# coding: utf-8

puts "i like my chars: ä, ü, ö and ß!"

答案 2 :(得分:1)

那些不是ASCII字符......它们恰好仍然在一些传统的ASCII派生字符集中以一个字节编码。最有可能发生的事情是您的源文件被保存为UTF-8,因为它包含非ASCII字符,并且ruby正确地处理了这个。

您只是在交互式提示下使用它,因为您的终端正在使用一些传统的字符编码。

答案 3 :(得分:0)

要转义ASCII编码的字符,请使用Unicode转义序列:

puts "i like my chars: \u00E4, \u00FC, \u00F6 and \u00DF!"

Ruby 1.9,无论如何 - 我不记得这是否适用于1.8。

答案 4 :(得分:0)

对我有用的是删除shebang行并直接从macosx下的ruby19运行脚本:

GreyJewel:Moralytics atma$ head -n1 moralytics 
**# coding: utf-8**
GreyJewel:Moralytics atma$ which ruby
/opt/local/bin/ruby
GreyJewel:Moralytics atma$ ruby --version
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11]
GreyJewel:Moralytics atma$ ruby moralytics 
Το λεξικό που χρησιμοποιούμε έχει: 407117 λέξεις
Το λεξιλόγειο του χρήστη atmat εμπεριέχει: 3943 λέξεις συνολικά.

那很有用。使用shebang会导致错误。我无法确定原因。

答案 5 :(得分:0)

在使用非ascii字符的脚本中添加魔术注释?它应该在脚本之上。

# encoding: utf-8

它对我来说就像魅力一样。

或者如果你想让项目更广泛,你可以选择magic-encoding gem