我有一个输出非ASCII字符的python脚本。它从命令行(具有 LANG en_US)工作正常。UTF-8),但是一旦我尝试在 Jenkins 中运行它(从同一个 shell 启动),它就会以 ascii 终端的典型方式失败:
UnicodeEncodeError: 'ascii' codec can't encode character u'xe5' in position 37: ordinal not in range(128)
我尝试在"执行外壳"构建步骤中的脚本调用之前,如下所示:
export LANG=en_US.UTF-8
但是,它似乎忽略了这一点。在我的 python 脚本中输入以下内容:
print "Encoding = %s" % sys.getdefaultencoding()
给我这个,不管我做什么:
Encoding = ascii
那么有什么东西可以让我强迫 Jenkins 使用 UTF-8 吗?
关系,找到了怎么做:
export PYTHONIOENCODING=UTF-8
在 Jenkins 安装中在系统级别设置编码,可以将其添加为全局属性键值对(Jenkins -> Manage Jenkins -> Configuration System),其中包含 name=LANG
和 value=<insert your locale here>
(在我的例子中等于 en_GB.UTF-8
)。这样就可以避免为每个 Jenkins 作业设置区域设置。
如果您使用的是 Jenkins 管道,则需要将管道中的编码设置为:
pipeline {
agent {label 'node name'}
environment {
LC_ALL = 'en_US.UTF-8'
LANG = 'en_US.UTF-8'
LANGUAGE = 'en_US.UTF-8'
}
stages {
stage ('XXXX') {
steps {
echo 'Hello'
}
}
}
}
export PYTHONIOENCODING=UTF-8
对我不起作用。然而
export LC_CTYPE=en_US.UTF-8
做到了。
我的解决方案是:升级到最新版本的 Jenkins。 似乎最新版本尊重系统区域设置。 看,例如,这个补丁也许?
无论如何,Ubuntu 13.10 附带的默认值已经过时了。从他们的官方 debian 存储库中提取最新版本为我修复了它!
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
另一种解决方案是使用 Python 3
brew update
brew install pyenv
pyenv install 3.7.3
pyenv local 3.7.3
make virtualenv