【发布时间】:2016-11-20 19:54:54
【问题描述】:
设置:
- Linux 主机上的 Vagrant VM
- 来宾操作系统是 Ubuntu Linux(bento/ubuntu-14.04 映像)
- 供应商是 Ansible
- Guest OS python 版本为 2.7.9
以下场景:
- 尝试使用 postgresql.conf 文件中的 ansible 模块更改 lineinfile
- 我收到以下错误消息:msg: 'ascii' codec can't decode 字节 0x 在位置:序数不在 范围(128)
我修复了设置 PYTHONIOENCODING 环境变量的问题:
export PYTHONIOENCODING="utf-8";
在 Vagrantfile 中。
即使这以某种方式解决了这个问题,我还是有一种奇怪的感觉,要么我错了,要么 Python 软件开发者错了,要么 Ansible 开发者错了,或者这是某种 Linus / Ubuntu 发行版复活节彩蛋,那就是正好拿出 2.7.9 Python 发行版来惹恼软件开发者,让他们思考而不是做。
严肃的问题是:“这个问题的真正解决方案是什么?”。
【问题讨论】:
-
在您的本地终端中,输入
echo $LC_CTYPE。然后,从该终端登录来宾,并输入echo $LC_CTYPE。结果如何? -
@AntonisChistofides 由
$ localeLANG=en_US.UTF-8 LANGUAGE=en_US 提供的多合一输出: 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=
-
@AntonisChistofides 由
$ localeLANG=en_US.UTF-8 LANGUAGE=en_US 提供的多合一输出: 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= 我不想承认 - 这是最好的我可以提供的格式。
标签: python ubuntu utf-8 ansible ascii