大佬们,openSUSE 命令行下怎么配置UTF8字符集

最近在docker上配置scrapy,基于opensuse leap 15,每次执行爬虫的时候都提示
UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)
百度了一波说是设置一下系统环境编码

我当前的系统环境编码

$ locale -a

C
C.utf8
en_US.utf8
POSIX

$ locale
LANG=
....其它的几个是 POSIX
LC_ALL=

于是我进行了如下配置

  1. /etc/environment中配置
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

重启… 发现LANG的值还没有,还是报错,删了…

  1. 创建/etc/locale.conf
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

重启… 怎么还是报错,mmp删了…
3. 在/etc/profile中添加

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

设置的值也没有,还是报错…

各位大佬,急救啊!!!

你的爬虫代码有问题吧,仔细检查。

你用的是python2?赶紧改成python3

在我主机上完美运行,我也在桌面版的openSUSE leap 15上运行过,放到docker里边就不行了。

我是py3

把代码贴上来看看,不然我们也没法帮你。简单说,系统编码对这种 Python 3 脚本不影响。肯定是脚本里面除了问题。

安装glibc-locale试试
这东西巨大无比,docker默认肯定不会装的。

也不一定,python会“智能”判断你系统支持啥,然后如果没装就fallback到ascii,然后……

不是代码的问题,我试了。在LANG没设置的情况下,进入python3的交互模式,打印编码环境是NSI_X3.4-1968,然后我 print('哈哈') 就会报错 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)export LANG=en_US.UTF-8,重新进入交互模式打印,就不报错

装了glibc-locale 也是不行,谢谢了。我现在的解决方式是,进入docker中,设置成UTF-8 然后commit一份镜像出来

交互式用的是 stdin 输入,你的爬虫脚本不是 curl 吗,没有 stdin 也没有命令行传递参数的话,系统编码应该根本不影响。好的脚本应该都会处理这些的,你的脚本要是因为运行环境变了就报错,那肯定是有问题。你应该多加一些 encode 和 decode 的代码来解决。