Ruby 1.9.3需要UTF-8解释中的无效字节序列

时间:2014-02-26 11:26:08

标签: ruby utf-8 rvm encode

我在Windows 7上通过Cygwin安装了RVM和Ruby。我现在正在尝试在this guide之后安装Omega软件包。命令是

bundle install

哪会出现错误'命令未找到'。解决方案是通过

安装bundler
gem install bundler

但是这会在UTF-8错误中产生一个无效的字节序列' this post中描述了解决方案。但我不明白我应该把这个片段放在哪里。

require 'iconv' unless String.method_defined?(:encode)
if String.method_defined?(:encode)
  file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
else
  ic = Iconv.new('UTF-8', 'UTF-8//IGNORE')
  file_contents = ic.iconv(file_contents)
end

请说明将此代码放在哪里。

谢谢!

3 个答案:

答案 0 :(得分:6)

我有64位Cygwin,Ruby 2.0.0和gem 2.4.1,并且遇到了同样的问题。 gem install ...gem update,所有内容都以&#34; 错误结束:执行gem ...(ArgumentError)UTF-8中的无效字节序列&#34;。< / p>

我还将所有语言环境设置为&#34; en_US.UTF-8 &#34;。

我已经阅读了某个地方,它应该有助于将LANG设置为空字符串或&#34; C.BINARY &#34;,但它没有帮助。但是开始试验是很好的暗示。

最后我通过将LANGLC_ALL都设置为空字符串来解决这个问题。所有其他语言环境变量(LC_CTYPE等)都是自动的设置为&#34; C.UTF-8&#34;由此,LANGLC_ALL仍为空。

现在gem终于有效了。


更新

如果将问题设置为 UTF-8 ,则LC_CTYPE似乎会导致该问题。因此将其设置为 C.BINARY 应该有所帮助。其他语言环境变量可以设置为 UTF-8 ,而不会影响它。

export LC_CTYPE=C.BINARY

答案 1 :(得分:3)

只需将角色设置为Cygwin的UTF-8以外的其他东西

点击左上方图标 - &gt;选项 - &gt;文字 - &gt;将“字符集”设置为某些内容(例如GBK)

答案 2 :(得分:0)

你可以试试这个,它对我有用:

> $ LANG=C.BINARY gem install bundler

您可以找到更多信息here