Python和Ansible编解码器错误UTF8到ascii转换

2024-06-02 08:17:17 发布

您现在位置:Python中文网/ 问答频道 /正文

设置:

  • Linux主机上的漫游虚拟机
  • Guest操作系统是Ubuntu Linux(bento/Ubuntu-14.04 image)
  • 供应器Ansible
  • 来宾操作系统python版本是2.7.9

以下场景:

  • 尝试在postgresql.conf文件
  • 我收到以下错误消息:msg:'ascii'编解码器无法解码 字节0x在位置:序号不在 范围(128)

我用以下行修复了设置PYTHONIOENCODING环境变量的问题:

 export PYTHONIOENCODING="utf-8";

在流浪档案里。在

尽管这在某种程度上解决了这个问题,但我有一种奇怪的感觉:要么我错了,要么Python软件开发人员错了,要么Ansible开发人员搞错了,要么这是某种Linus/Ubuntu发行版复活节彩蛋,这正是2.7.9python发行版的产物,它让sotware开发人员感到恼火,让他们思考,而不是去做。在

严肃的问题是:“这个问题的真正解决办法是什么?”。在


Tags: 文件image版本开发人员postgresqlubuntulinuxconf
1条回答
网友
1楼 · 发布于 2024-06-02 08:17:17

问题可能是远程计算机(即您的客户机)没有生成区域设置en_US.UTF-8。本地有LC_CTYPE=en_US.UTF-8。当ansible开始在远程机器上运行时,它继承了相同的东西(ssh会这样做,可能还有ansible,我不确定),因此,在远程,ansible也会与LC_CTYPE=en_US.UTF-8一起运行。如果该语言环境不存在,诸如Python之类的程序将返回到默认语言环境C,它只支持ASCII。在

为了避免这个问题,我确保生成了locale。我有一个"common"ansible模块,它是列出的所有服务器的第一个模块,它执行一些对所有服务器都通用的基本配置。模块做的第一件事(因此在任何服务器上做的第一件事)是:

- name: Install locales
  locale_gen: name={{ item }} state=present
  with_items:
    - en_US.UTF-8
    - en_DK.UTF-8

(我也生成en_DK.UTF-8的原因不是我是丹麦人[我不是],而是我经常使用LC_TIME=en_DK.UTF-8,因为我喜欢ISO8601中的日期。)

相关问题 更多 >