ubuntu / python编码坑一则

一个django文件上传老是出现unicode error

  UnicodeEncodeError: 'ascii' codec can't encode character u'\uWTFH' in position 0: ordinal not in range(128)

折腾了好久 reload(sys) sys.setdefaultencoding() locale.setdefaultlocale()

后来发现是os.environ["LANG"]居然为空。这尼玛为毛啊。

LANG为空也就算了,发现另外一个神奇的bug:

  $ export LC_ALL=en_US.UTF8
  $ python -c "print __import__('locale').getdefaultlocale()"
  ('en_US', 'UTF8')

  $ export LC_ALL=en_US
  $ python -c "print __import__('locale').getdefaultlocale()"
  ('en_US', 'ISO8859-1')

  $ export LANG=
  $ python -c "print __import__('locale').getdefaultlocale()"
  ('en_US', 'ISO8859-1')

ISO8859-1 就是臭名昭著的latin-1编码也就是最脑残不过的 ascii 编码。反生产力啊。

感谢 killkeeper :D

Comments