【问题标题】:invalid multibyte char (UTF-8) Error, Ruby无效的多字节字符 (UTF-8) 错误,Ruby
【发布时间】:2013-07-25 22:44:42
【问题描述】:

我尝试使用命令 rails runner 在 rails 中运行 ruby​​ 脚本。 ruby 文件看起来像这样,应该会创建新的患者:

 Patient.create!({:vorname => 'Josepha', :nachnahme => 'Brecht', :geburtsdatum => '25.04.1963', :strasse => 'Umdorf', :ort => 'Wörthss', :plz => '93093'})
 Patient.create!({:vorname => 'Tumba', :nachnahme => 'Hoch', :geburtsdatum => '17.77.1956', :strasse => 'Hamaß 1', :ort => 'Brenn', :plz => '93189'})

但不知何故,我的代码与德语有问题!我是编程初学者,不知道我必须改变什么!感谢您的帮助!

 C:\Sites\what>rails runner patienten.rb
 C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.13/lib/rails/c
 ommands/runner.rb:51:in `eval': patienten.rb:2: invalid multibyte char (UTF-8) (
 SyntaxError)
 patienten.rb:2: syntax error, unexpected tIDENTIFIER, expecting '}'
 ...> 'Schlossberg', :ort => 'Wörth', :plz => '93086'})
 ...                               ^
 patienten.rb:2: syntax error, unexpected tINTEGER, expecting $end
 ...:ort => 'Wörth', :plz => '93086'})
 ...                               ^
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1
 3/lib/rails/commands/runner.rb:51:in `<top (required)>'
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1
 3/lib/rails/commands.rb:64:in `require'
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1
 3/lib/rails/commands.rb:64:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

【问题讨论】:

  • 您有什么理由不使用 Ruby 2.0?在 2.0 中,问题自动消失。
  • 您缺少重现问题的代码。向我们展示一个仅尝试加载一小部分数据的精简示例。另外,ruby -v 报告了什么?
  • @sawa 我可以简单地用 rvm install 2.0.0 更新我的 ruby​​ 版本吗?还是涉及其他步骤?

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

这个文件是什么格式的?您确定它是 UTF-8 而不是 Windows 中的默认 Windows 1252

在 Ruby 1.9 中,文件中的标题需要指明实际使用的格式:

# encoding: UTF-8

如果这不起作用,您可能需要与其他人一起试验:

# encoding: Windows-1252

另一种常见的格式是ISO Latin1:

# encoding: ISO-8859-1

1252和8859-1都是单字节字符集,每个字符总是一个字节,其中UTF-8是可变长度,每个字符是一个或更多个字节。

如果您需要在格式之间进行转换,通常您可以在an editor that's encoding aware 中打开并使用您想要的编码“另存为...”。否则您可以尝试使用iconv 为您转换。

【讨论】:

  • 你很好!!我从早上 8 点到现在尝试了一整天来运行这个程序!现在使用 # encoding: Windows-1252 就可以了!谢谢!!祝你有美好的一天!
【解决方案2】:

添加

# -*- encoding : utf-8 -*-

在文件的顶部

【讨论】:

  • # encoding: utf-8 就足够了。不需要装饰。
【解决方案3】:

将这两行放在脚本的顶部。

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

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多