为什么默认编码仍然是ASCII?

时间:2013-08-17 18:54:21

标签: python-2.7 encoding

根据python Unicode-HOWTO,如果设置LAND环境变量,默认编码将不是ASCII。

我在Mountain Lion上有python2.7,$ LANG环境变量是“en_US.UTF-8”。运行“sys.getfilesystemencoding()”会返回“utf-8”,但运行“sys.getdefaultencoding()”会返回“ascii”。

当我运行以下内容时:

struct.pack('12s',u'filename\u4500abc')

失败了:

TypeError: Struct() argument 1 must be string, not unicode

明确更改为

struct.pack('12s',u'filename\u4500abc'.encode('utf-8'))

的工作。

问题是“sys.getdefaultencoding”和“sys.getfilesystemencoding”有什么区别?看来第一个与“struct.pack”有关,第二个是什么?如何在执行“struct.pack”时将'utf-8'作为默认编码?

1 个答案:

答案 0 :(得分:0)

简答:

我认为$ LANG是操作系统的用法,而不是python - 如果你想了解更多详细信息,请查看很长的答案。

答案很长:

Python 2.x的默认值是使用ascii。您可以更改它(不记得如何),但不建议这样做,因为它会破坏使用ascii字符串的库。 它在3.x中全部改变了。其中UTF是标准。等不及Python 3.x成为标准!

你可以在Unicode in Python中阅读有关Unicode的内容,这真的很有帮助。

如何设置默认值!但警告! 这是您设置默认编码的方式。但是不要使用它,它会破坏库,并导致更多的痛苦,而不仅仅是编码和解码:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')