2009-11-16 317 views
192

我使用Ruby和Rails 1.9.1 2.3.4我的應用程序是處理文本輸入無效的多字節字符(US-ASCII)使用Rails和Ruby 1.9

如果我嘗試像(內部引號不同的外觀)

text = "」「" 

我得到以下錯誤:

#<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) 
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) 
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end 

我需要用戶的引號,因爲用戶可能輸入他們,我必須考慮是什麼?

任何想法?

+0

如果你的代碼沒有任何反引號但是你被「指責」使用反引號,你的文件中可能會出現一些奇怪的間距/製表符/換行符問題。嘗試將它張貼到一個StackOverflow空白的例子中,並且SO會開始表現怪異。刪除奇怪的空格和製表符和換行符。再次,將代碼粘貼到SO空白處,並嘗試將代碼格式化爲演示文稿是給自己一個提示的方法之一。 – 2012-08-13 04:06:35

回答

6

那些傾斜的雙引號不是ASCII字符。錯誤消息誤導他們是'多字節'。

+2

它爲什麼會產生誤導?他們*是*多字節字符。 – 2009-11-16 03:07:09

+4

由於ASCII不定義任何多字節編碼。就ASCII而言,這些都是亂碼,恰好在相關編碼中有效。 – Novelocrat 2009-11-16 03:22:25

685

您是否嘗試過在使用非ASCII字符的腳本中添加魔術註釋?它應該放在腳本的頂部。

#!/bin/env ruby 
# encoding: utf-8 

它對我來說就像一個魅力。

+2

嗯.........添加到文件的頂部,但仍然得到相同的錯誤信息。有什麼建議麼? – 2012-03-19 15:33:48

+0

@ArtemKalinchuk只需將它直接添加到'#!/ bin/env ruby​​'我在它們之間有一個空行,它不起作用。 – Thomas 2012-06-28 12:56:48

+8

可以在@dalyons鏈接中找到中心解釋:除非另有說明,否則_source文件會收到US-ASCII編碼。如果你將任何非ASCII內容放在一個字符串文字中而不改變源代碼編碼,Ruby將會因爲那個錯誤而死亡。謝謝你們,我終於明白了:-) – 2012-08-13 09:58:17

43

如果你想在一個項目的所有源文件輕鬆添加魔術註釋,你可以使用magic_encoding寶石

sudo gem install magic_encoding 

然後就打電話magic_encoding在終端從您的應用程序的根目錄。

+0

我認爲記住這種細節很重要,所以我不會在手動編寫#encoding:utf-8至少幾個月的時間裏使用該gem。 – 2012-10-29 22:06:36

+0

在rails上爲gemfile添加'gem magic_encoding'2.3&ruby 1.9幫助 – Elmor 2012-12-04 18:11:35

+0

這不會整合到黃瓜測試中。 – Trip 2013-08-12 17:34:32

6

請注意,從Ruby 2.0開始,不需要添加# encoding: utf-8。 UTF-8會自動檢測到。

3

爲我工作:

$ export LC_ALL=en_US.UTF-8 
$ export LANG=en_US.UTF-8 
16

我只想補充我的解決方案:

我用德語變音像ö,ü,和得到了同樣的錯誤。
@Jarek Zmudzinski只是告訴你它是如何工作,但這裏是我的:

將此代碼添加到您的控制器的頂部:# encoding: UTF-8
(例如使用帶有變音閃光燈消息)

例子我的控制器:

# encoding: UTF-8 
class UserController < ApplicationController 

現在你可以使用O,A,ü,ß「」等

相關問題