my_unicode = u"Hi \u2119\u01b4\u2602\u210c\xf8\u1f24"
怎么我在 2.7 下直接 print 出来式可以的,而 ppt 里给的是错误?
>>> print my_unicode
Hi ℙƴ☂ℌøἤ
1
glasslion 2017-08-15 09:56:07 +08:00
和你的命令行的 locale/language 设置有关,utf-8 就不会报错
|
2
rebeccaMyKid OP @glasslion 能简单讲讲吗?
这么理解对不对: print 需要的是 bytes,那如果我直接 print 会有一个隐式的 decode,而这个 decode 是根据终端的设置来的。 但 `"Hello " + my_unicode` 这里的隐式 decode 就是跟 sys.getdefaulencoding()相关的。 这么理解对吗? |
3
glasslion 2017-08-15 10:21:52 +08:00 1
@rebeccaMyKid
1. ` locale.getpreferredencoding()` 是 Python 在 open 文件时默认使用的 encoding 2. `sys.getdefaultencoding() ` 是 Python 进行 str/unicode(byte/str) 转换时默认使用的 encoding 3. `sys.getfilesystemencoding()` 是用来 encoding 文件**名**的, 例如 open('ℙƴ☂ℌøἤ,txt') 4. 标准输入输出(print)的 encoding: 4.1 若设置了 `PYTHONIOENCODING` 环境变量, 则以次变量为准 4.2 标准输入输出是打到终端的话, 看终端的 locale 配置,e.g. linux 的 LANG 环境变量, 在 windows cmd 的代码页 4.3 标准输入输出被重定向到文件的话, 则参照 1, 用的是 ` locale.getpreferredencoding()` |
4
fxxkgw 2017-08-15 10:23:25 +08:00 1
@rebeccaMyKid 有个地方不对
u ’中文’=‘中文’.decode(encode) 这个地方就是你说的隐式 decode 此处 encode 值为 sys.stdin.encoding,而不是 sys.getdefaulencoding() sys.getdefaulencoding()是系统编码 sys.stdin.encoding sys.stdout.encoding 是终端 两者不一样 前者一般是 ASCII 后者一般是 utf-8 |
5
rebeccaMyKid OP @fxxkgw 不对啊,print 是 sys.stdout.encoding,但 u'中文'.decode()这个用的是 sys.getdefaultencoding()
|