Sinatra/Ruby - 内部服务器错误:US-ASCII中的字节序列无效.由具有特殊字符的数组引起

ton*_*nic 2 ruby arrays utf-8 character-encoding sinatra

我正在使用Sinatra构建一个应用程序.应用程序运行得很好,除了我最近添加一个元素到一个具有特殊字符(Yóü)的数组.

@peeps = ["Joe", "James", "Phil", "Jane", "Yóü"]
Run Code Online (Sandbox Code Playgroud)

我使用这个数组来做很多事情,虽然我不确定我是否需要在这篇文章中包含它们.当我运行我的应用程序时,我在浏览器中收到以下错误消息:

Internal Server Error: invalid byte sequence in US-ASCII
Run Code Online (Sandbox Code Playgroud)

在我的终端窗口中,运行后我看到以下内容 ruby app.rb

app.rb:34: invalid multibyte char (US-ASCII)
app.rb:34: invalid multibyte char (US-ASCII)
app.rb:34: syntax error, unexpected $end, expecting ']'
Run Code Online (Sandbox Code Playgroud)

此外,为了它的价值,我通常使用霰弹枪来运行我的服务器,因为我可以进行更改并只刷新页面.那是我跑的时候显示这个错误shotgun app.rb

[2012-08-16 21:36:37] ERROR ArgumentError: invalid byte sequence in US-ASCII
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/rack-1.4.1/lib/rack/utils.rb:182:in `gsub'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/rack-1.4.1/lib/rack/utils.rb:182:in `escape_html'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/loader.rb:76:in `format_error'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/loader.rb:52:in `proceed_as_parent'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/loader.rb:28:in `call!'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/loader.rb:18:in `call'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/favicon.rb:12:in `call'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/shotgun-0.9/lib/shotgun/static.rb:14:in `call'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/rack-1.4.1/lib/rack/builder.rb:134:in `call'
    /Users/me/.rvm/gems/ruby-1.9.3-p125@rails3tutorial2ndEd/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:in `service'
    /Users/me/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    /Users/me/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    /Users/me/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Run Code Online (Sandbox Code Playgroud)

Jos*_*des 7

对我来说最终的诀窍是在config.ru的顶部添加以下行:

Encoding.default_external = Encoding::UTF_8
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


muf*_*sta 5

您尚未发布所有代码,但您可能需要将文件标记为UTF-8,您可以在顶部使用"魔术评论":

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

这是对这个问题的一个很好的解释.