Rails和Ruby 1.9无效的多字节char(US-ASCII)


197

我在Rails 2.3.4中使用Ruby 1.9.1,我的应用程序是处理文本输入

如果我尝试类似的方法(内部引号看起来不同)

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

我需要使用那些引号,因为用户可能会输入这些引号,而我必须考虑这一点?

有任何想法吗?


如果您的代码中没有反引号,但您被“指控”使用反引号,则文件中可能存在一些奇怪的空格/制表符/换行符问题。尝试将其发布到StackOverflow空白中,这样SO就会开始变得奇怪。删除奇怪的空格和制表符和换行符。同样,仅将代码粘贴到SO空白中并尝试格式化代码以进行演示是一种提示自己的方法。
boulder_ruby

Answers:


691

您是否尝试过在使用非ASCII字符的脚本中添加魔术注释?它应该放在脚本之上。

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

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


2
嗯.........将其添加到文件的顶部,但仍会收到相同的错误消息。有什么建议?
Artem Kalinchuk 2012年

8
可以在链接的@dalyons文章中找到中央说明:除非您另有说明,否则源文件将接受US-ASCII编码。如果您在String文字中放置任何非ASCII内容而不更改源编码,则Ruby将因该错误而死亡。谢谢大家,我终于明白了:-)
bass-t

2
#!/bin/env ruby除非您从命令行将脚本作为可执行文件运行,否则不需要。该# encoding生产线本身可以工作。
gak

10
# encoding: utf-8。2013年下半年,我们仍然必须玩这个游戏。等等,电话响了……2033年,他们打电话说他们仍然在玩。哦,很好,谢谢您提醒我,来自2010
thomax

1
@gotqn-请在这里找到相同的文章-graysoftinc.com/character-encodings/…–
Alok Swain

43

如果要在项目的所有源文件上轻松添加魔术注释,则可以使用magic_encodinggem

sudo gem install magic_encoding

然后只需magic_encoding从应用程序的根目录调用终端即可。


我认为记住此类细节很重要,因此至少在几个月后手动编写utf-8编码之前,我不会使用该gem。
马塞尔·瓦尔德兹·奥罗斯科

在rails 2.3和ruby 1.9上的gemfile中添加'gem magic_encoding'帮助
Elmor

这不会集成到黄瓜测试中。
2013年

1
@Elmor绝对不要这样将外部库放入项目的Gemfile中。magic_encoding只是命令行工具,而不是项目依赖项。
Nowaker

17

我只想添加我的解决方案:

我使用ö,ü,ä之类的德国变音符号,却遇到了相同的错误。
@Jarek Zmudzinski刚刚告诉您它是如何工作的,但这是我的:

将此代码添加到Controller的顶部:(# encoding: UTF-8
例如,使用带有元音符号的Flash消息)

我的控制器示例:

# encoding: UTF-8
class UserController < ApplicationController

现在您可以使用ö,ä,ü,ß,“”等。


8

那些倾斜的双引号不是ASCII字符。错误消息会误导他们是“多字节”。


2
为什么会产生误导?它们多字节字符。
马修·沙利

4
因为ASCII没有定义任何多字节编码。至于ASCII,这些都是乱码,恰好在相关的编码中有效。
Phil Miller

8

请注意,从Ruby 2.0开始,无需添加# encoding: utf-8。自动检测到UTF-8。


7

这对我有用:

$ export LC_ALL=en_US.UTF-8
$ export LANG=en_US.UTF-8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.