我有一个 ruby 脚本,我想将其作为 cron 作业运行。当我在 Linux 机器上通过命令提示符运行时,它运行得很好。但是当我使用 cron 作业运行同一个脚本时,它失败了。
我在字符串编码时收到以下错误。不知道为什么它只在我作为 cron 作业运行时才会出现错误。我还在 crontab 中将 shell 设置为 /bin/bash,这与我的命令提示符是同一个 shell。
我得到的错误是
在 US-ASCII 上的 `encode': "\xE2" 中(Encoding::InvalidByteSequenceError)
导致错误的代码行是
split.encode('utf-8).split(some_str)
答案1
错误消息告诉您,您在环境中将crontab
US-ASCII 设置为语言,并且在该语言中不存在字符串“\xE2”。最有可能的是,这是因为该字符串是 ASCII-8bit 编码的,而您需要将其转换为 UTF-8。
字符串可能被某些不可见字符污染了,就像在进行剪切和粘贴时经常发生的那样。
适用以下内容前操作字符串应该可以解决你的问题:
new_str = some_str.encode('utf-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')