根据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'作为默认编码?
答案 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')