当我从Windows计算机上运行以下内容时(通过Cygwin),我收到错误消息:
ssh bob@linux-server.com 'cd ./bin && ./script.rb'
./script.rb:2:in `gsub': invalid byte sequence in US-ASCII (ArgumentError)
从Mac上的终端运行相同的代码(上面的整个ssh
行)是成功的。
这怎么可能?
这是上面名为script.rb
的双行脚本:
#!/usr/bin/env ruby
File.open('/home/bob/input.txt').read.gsub(/A/, 'B')
更多信息......
我清空上面的输入文件input.txt
,ls -l input.txt
和stat input.txt
报告的大小仍为3
。正在运行file input.txt
次报告UTF-8 Unicode text, with no line terminators
;如果我只在input.txt
中放置一个字符,则其大小变为5
,而file
将其报告为UTF-8 Unicode (with BOM) text
。
Linux服务器上的Ruby版本为2.2.7p470
,RubyGems(gem --version
)为2.6.11
。
文件input.txt
由第三方程序生成(它是数据导出)。
从Windows / Cygwin / ssh执行时File.open('/home/bob/input.txt').read.encoding
运行US-ASCII
,从macOS / Terminal / ssh执行UTF-8
。
答案 0 :(得分:0)
尝试在script.rb文件的第一行之后添加:
#!/usr/bin/env ruby
#encoding: utf-8
File.open('/home/bob/file.txt').read.gsub(/A/, 'B')
如果不能解决问题,请参阅此https://github.com/rubygems/rubygems/issues/863 您可能需要在Windows计算机上运行它:
LANG="${LANG%%.*}.BINARY" gem update
答案 1 :(得分:0)
这解决了我的问题。但是,我在服务器上的shell是bash
,所以我使用了~/.bash_profile
:
尝试添加或编辑
~/.profile
文件,以便正确导出 启动新会话时的语言环境设置。export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
来源:How to get UTF-8 locale when connecting via SSH to MacOSX from PuTTY (Windows)
注意:它适用于上述两个或变量。知道原因会很好。