使用Docker部署站点,文件操作编码错误小记

碰到的问题如下
> UnicodeEncodeError: 'ascii' codec can't encode characters in position xx-xxx: ordinal not in range(128)

因为要进行文件操作,而文件名含有中文的,然后当时就意识到这个是编码问题了。
在代码中使用string.encode('utf-8')之后依旧误解。然后尝试了在镜像中设置环境变量,如下:

其一,docker-compose编排容器中加入environment,如:

services:
    image: username/image
    build:
        context: .
        dockerfile: ./path/to/dockerfile
    environment:
        - LANG=en_US.UTF-8
        - LC_ALL=en_US.UTF-8
        - LC_CTYPE=en_US.UTF-8

接着docker-compose -f dompose.yml build,再次进行文件操作,还是同样的问题。与此同时,一进入container里面的shell就报下面错误:

bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

其二,将docker-compose container 编排文件里面的environment的内容移动到文件,形成一个包含容器运行时需要的环境变量的文件。

services:
    image: username/image
    build:
        context: .
        dockerfile: ./path/to/dockerfile
    env_file:
        - ./.envs/.django/.env

build了一次,同样是进行文件操作,再一次又是同一样的问题。进入容器中的shell,依旧出现和其一中shell的错误一样。这时,使出了最后的杀招:面向Google编程,哦,不,是面向startpage进行编程。使用了关键字set LC_ALL in docker,哎,点击出来的第二条结果,看到了可人的中文,这应该是符合我这个问题的解决方式了。在出来的网页里的best answer里面的的评论里看到了PYTHONIOENCODING=utf-8,所以双次面向stackoverflow + C-V编程。
这么一经实践,问题最终得以解决了

但是呢,这我原来尝试的方式,是可以用来解决终端中想显示中文但却显示??????的问题的。

Docker Python set utf-8 locale

-- EOF --