1

根据 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”作为默认编码?

4

1 回答 1

0

简短的回答:

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

长答案:

Python 2.x 的默认设置是使用 ascii。您可以更改它(不记得如何更改),但不建议这样做,因为它会破坏使用 ascii 字符串的库。这一切都在 3.x 中改变了。其中UTF是标准。迫不及待地希望 Python 3.x 成为标准!

您可以在 Python中阅读 Unicode 中的Unicode ,这是对我很有帮助的精彩演示。

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

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
于 2013-08-17T19:03:31.150 回答