2010-08-14 55 views
3

我的應用程序需要處理一些國際字符,即ä,ü,ö和ß,這仍然是ascii。「無效的多字節字符(US-ASCII)」錯誤ä,ü,ö,ß這是Ascii!

當我測試紅寶石的行爲時,處理這些字符,我得到這個錯誤:

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檢索數據。上面的代碼只是一個例子!

回答

8

將魔術註釋# coding: utf-8放在開始您的腳本(如果您使用的是shebang,則在第二行)。

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

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

不,這些字符不是的ASCII碼。 ASCII碼沒有超過Unicode U + 007F(十進制127)的任何值。有關更多詳細信息,請參見wikipedia ASCII entry

我懷疑交互式Ruby shell是採用你的shell的本地編碼,而不是ASCII。

您是否有指定.rb文件編碼的方法?如果是這樣,那就使用它 - 或者改變你的腳本,使它們真的是 ASCII。

+0

哦感謝的選擇,我一直以爲ASCII包含256個字符。但是這並不能解決我的問題,因爲我從外部API中檢索文本...... – Vincent 2010-08-14 17:37:03

+1

@Vincent:如果您從外部API檢索文本,爲什麼在您的Ruby腳本中?如果它真的只是測試,把它放在一個文本文件中,並從你的Ruby腳本加載它,而不是直接把它放到腳本中。 – 2010-08-14 17:59:33

1

那些不是ASCII字符......它們恰好在一些遺留的,ASCII派生的字符集中仍然被編碼爲一個字節。最可能發生的情況是您的源文件被保存爲UTF-8,因爲它包含非ASCII字符,並且ruby正確地處理了這個。

因爲您的終端正在使用一些傳統字符編碼,您只能在交互式提示符下使用它。

0

逃避的ASCII編碼字符,使用Unicode轉義序列:

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

Ruby 1.9的,反正 - 我不記得,如果這個工程在1.8。

0

什麼工作對我來說是去除家當線下的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會導致錯誤。我無法確定爲什麼。

0

在使用非ASCII字符的腳本中添加神奇評論?它應該放在腳本的頂部。

# encoding: utf-8 

它爲我工作就像魅力。

或者,如果你想使項目範圍,你必須magic-encoding寶石

相關問題