我已经尝试了一千种方法来解决这个问题,但我没有更多的想法。在Ruby 1.9.3p448中,我在我的本地机器和prod服务器上设置了我的语言环境:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
在irb中,两台计算机上Encoding.default_internal
和Encoding.default_external
均为UTF-8
。
但是,运行此命令并解析stdout
会导致生产错误,而不是本地框:
parse_stdin, parse_stdout, parse_stderr, parse_exit = Open3.popen3("myshellcommand", "myparam")
puts parse_stdout.gets.to_s
错误:
invalid byte sequence in US-ASCII
还有什么会影响Ruby字符串编码,认为它是US-ASCII?不应该从语言环境设置吗?
编辑:经过进一步调查后,角色为“\ xC3”。
编辑:我在Ubuntu 12.04上使用Ruby 1.9.3p448和rubygems 1.8.24