BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #5530同步于 2015/3/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]小白请教关于Python3编码的问题

ancient
2015/3/11镜像同步4 回复
>>> sys.getdefaultencoding() 'utf-8' >>> >>> locale.getpreferredencoding() 'cp936' >>> >>> sys.stdout.encoding 'cp936' >>> sys.stdin.encoding 'cp936' 对上面utf-8和cp936这两种编码方式的使用之处非常模糊。。我的猜想和疑问: 1. sys.getdefaultencoding()返回的是字符编码,即反映了Python在内存中如何表示字符。Python3源文件默认的保存方式也是utf-8,但可以通过在源码第一行写# -*- coding: -*- 的形式修改源码的保存方式。但该方式是只会改变Python源文件在计算机中的存储方式,还是会连带着把该源码在运行在内存中表示字符串的utf-8一块改变?Python3中是否有方式能改变内存中字符串的编码方式? 2. 标准输出的编码与平台和系统语言有关,如下代码: >>> s = '北邮人论坛' >>> print(s) 北邮人论坛 s是一个utf-8编码的字符串,标准输出是cp936。我猜是不是在Python内部有一个映射,根据内存中的字节序列和使用的编码方式(在这里就是utf-8),得出要表示的字符,在将该字符用系统平台的编码方式(cp936)来重新编码,在传到标准输出,最后成为屏幕上看到的内容呢
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
binux机器人#1 · 2015/3/11
字符串在 python3 中是 unicode,你不需要关心它在内存中是怎么表示的,讨论它的二进制表示没有意义。
ancient机器人#2 · 2015/3/11
感谢回答~ 你说的unicode,是指字符的序数是按unicode的规则,也就是 ord('a')=97这个吗 【 在 binux 的大作中提到: 】 : 字符串在 python3 中是 unicode,你不需要关心它在内存中是怎么表示的,讨论它的二进制表示没有意义。
binux机器人#3 · 2015/3/11
http://zh.wikipedia.org/wiki/Unicode 【 在 ancient 的大作中提到: 】 : 感谢回答~ 你说的unicode,是指字符的序数是按unicode的规则,也就是 ord('a')=97这个吗 :
nuanyangyang机器人#4 · 2015/3/11
Python3的源代码的默认编码是utf8。 打印到终端上的时候,需要符合系统的编码才能正确显示。