2

次のことは本当に私を悩ませます.私のラップトップのpythonのバージョンとDockerのubu​​ntu:trustyイメージ内のpythonのバージョンは、コーデックで異なる結果を出力しています.その理由は何ですか? たとえば、私のラップトップ (ubuntu、trusty) の python3:

Python 3.4.3 (default, Apr 14 2015, 14:16:55) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import codecs
>>> codecs.decode(b'\xe2\x80\x99','utf8')
'’'
>>> 

Docker 上の python3 ubuntu:latest:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import codecs
>>> codecs.decode(b'\xe2\x80\x99','utf8')
'\u2019'
>>> 

Docker の ubuntu:trusty で python3 コーデックを作成して b'\xe2\x80\x99' を ''' としてデコードできますか?

4

2 に答える 2

2

以下は、何が起こっていたか、およびそれを修正する方法を示しています。

root@df329ec1fe88:/# python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import codecs
>>> codecs.decode(b'\xe2\x80\x99','utf8')
'\u2019'
>>> exit()
root@df329ec1fe88:/# locale -a
C
C.UTF-8
POSIX
root@df329ec1fe88:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
root@df329ec1fe88:/# sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.
root@df329ec1fe88:/# sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.
root@df329ec1fe88:/# echo "export LC_ALL=en_US.utf8" >> ~/.bashrc
root@df329ec1fe88:/# echo "export LANG=en_US.utf8" >> ~/.bashrc
root@df329ec1fe88:/# echo "export LANGUAGE=en_US.utf8" >> ~/.bashrc
root@df329ec1fe88:/# source ~/.bashrc 
root@df329ec1fe88:/# locale 
LANG=en_US.utf8
LANGUAGE=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
root@df329ec1fe88:/# python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import codecs
>>> codecs.decode(b'\xe2\x80\x99','utf8')
'’'
>>> exit()
root@df329ec1fe88:/# 

その後、このコンテナーを将来の使用のために新しいイメージとしてコミットするか、Dockerfile でこのプロセスを自動化することができます。基本的に次の行を追加します。

RUN locale-gen "en_US.UTF-8"
RUN dpkg-reconfigure locales
RUN echo "export LC_ALL=en_US.utf8" >> ~/.bashrc
RUN echo "export LANG=en_US.utf8" >> ~/.bashrc
RUN echo "export LANGUAGE=en_US.utf8" >> ~/.bashrc
于 2015-04-20T10:39:29.873 に答える