0

我已经尝试了一千种方法来解决这个问题,但我没有更多的想法。在 Ruby 1.9.3p448 中,我在本地机器和产品服务器上都设置了我的语言环境:

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_internalEncoding.default_externalUTF-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 和 ruby​​gems 1.8.24

4

0 回答 0