使用Rails和Ruby 1.9的无效多字节字符(US-ASCII)

Tam*_*Tam 197 ruby-on-rails ruby-1.9

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

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

text = "”“"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

#<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
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

小智 690

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

#!/bin/env ruby
# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

它对我来说就像一个魅力.

  • `#encoding:utf-8`.这是2013年末,我们仍然要玩这个游戏.等一下,电话响了...... 2033年,他们打电话说他们还在播放.哦,谢谢你提醒我,Jarek Zmudzinski来自2010年. (10认同)
  • 除非另有说明,否则可以在文章@dalyons链接中找到中心解释:_source文件接收US-ASCII编码.如果你在字符串文字中放置任何非ASCII内容而不改变源代码编码,那么Ruby会因为那个错误而死.-谢谢大家,我终于得到了它:-) (8认同)
  • 嗯.........添加到文件的顶部但仍然得到相同的错误消息.有什么建议? (2认同)
  • 除非您从命令行运行脚本作为可执行文件,否则不需要`#!/ bin/env ruby​​`.`#coding`行自行工作. (2认同)

小智 43

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

sudo gem install magic_encoding
Run Code Online (Sandbox Code Playgroud)

然后magic_encoding从应用程序的根目录中调用终端.


Ism*_*moh 17

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

我使用像ö,ü,ä这样的德语变音符号并得到同样的错误.
@Jarek Zmudzinski刚刚告诉你它是如何工作的,但这是我的:

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

我的控制器示例:

# encoding: UTF-8
class UserController < ApplicationController
Run Code Online (Sandbox Code Playgroud)

现在你可以使用ö,ä,ü,ß,""等.


Now*_*ker 8

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


Phi*_*ler 7

那些倾斜的双引号不是ASCII字符.错误消息误导他们是'多字节'.

  • 因为ASCII没有定义任何多字节编码.至于ASCII,那些是乱码,恰好在相关编码中有效. (4认同)
  • 为什么会误导?它们是*多字节字符. (2认同)

cas*_*ral 7

这对我有用:

$ export LC_ALL=en_US.UTF-8
$ export LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)