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

ban*_*per 1 ruby encode utf-8 rvm

我在Windows 7上通过Cygwin安装了RVM和Ruby.我现在正在尝试按照本指南安装Omega软件包.命令是

bundle install
Run Code Online (Sandbox Code Playgroud)

这给出了错误'找不到命令'.解决方案是通过安装bundler

gem install bundler
Run Code Online (Sandbox Code Playgroud)

但这会产生"UTF-8错误中的无效字节序列".对于这个问题的解决中描述了这个职位.但我不明白我应该把这个片段放在哪里.

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

请解释这段代码的放置位置.

谢谢!

Daw*_*žan 6

我有64位Cygwin,Ruby 2.0.0和gem 2.4.1,并遇到了同样的问题.gem install ...,gem update一切都以" 错误:在UTF-8中执行gem ...(ArgumentError)无效字节序列 "结束.

我还将所有语言环境设置为" en_US.UTF-8 ".

我在某处读过它应该有助于设置LANG为空字符串或" C.BINARY ",但它没有帮助.但是开始试验是很好的暗示.

最后,我已经通过设置既解决LANGLC_ALL为空字符串.所有其他语言环境变量(LC_CTYPE等)由此自动设置为"C.UTF-8",LANGLC_ALL保持为空.

现在gem终于有效了.


UPDATE

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

export LC_CTYPE=C.BINARY