Python3下打印字符串出现UnicodeEncodeError

2017-08-03 1910 0

使用Python3打印对象时,出现了UnicodeEncodeError

  1. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

不是说好Python3不用担心字符编码的问题的么twemoji-1f602

查看终端编码

  1. [GCC 4.8.4] on linux
  2. Type "help", "copyright", "credits" or "license" for more information.
  3. >>> import sys
  4. >>> sys.stdout
  5. <_io.TextIOWrapper name='<stdout>' mode='w' encoding='ANSI_X3.4-1968'>
  6. >>>

这个ANSI_X3.4-1968的编码是什么东西?是Linux默认编码,Google一下,发现这个,有两种解决方式:

  1. 在python代码中更改sys.stdout

    1. import sys
    2. import io
    3. sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  2. 修改系统环境变量

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