python2.7中文编码
来源:互联网 发布:mac迅雷界面看不见人物 编辑:程序博客网 时间:2024/05/22 17:24
问题1:在编辑器(如Notepad++)中
print '中文'SyntaxError: Non-ASCII
问题2:在编辑器(如Notepad++)中
#-*- coding:utf-8- *-print '中文'在windows cmd乱码:涓枃
问题3::在编辑器(如Notepad++)中
# -*- coding: utf-8 -*-print '中文'.decode('utf-8') #在cmd中结果正常
问题4:在cmd中
print '中文'结果正常
问题5:在编辑器(如Notepad++)中
# -*-coding: utf-8-*-import sysreload(sys)sys.setdefaultencoding('utf-8')print '中文'.encode('gbk')结果正常
然而
# -*-coding: utf-8-*-print '中文'.encode('gbk')UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
先说两个东西:
1.编辑器中的编码,可以由 --coding:utf-8-- 声明,若无此句,默认保存字符串的方式是ascii
2.终端里编码格式,windows中cmd默认为gbk格式
在问题1中,因为存在‘中文’这个非ascii字符串,导致报错。
问题2,加了--coding:utf-8--,没有报错,因为声明了字符串的保存方式是utf-8格式,但由于终端中的编码格式是gbk,所以乱码。
问题3,’中文’.decode(‘utf-8’)产生正确结果,是因为将utf-8格式字符串先转换为unicode,然后在终端cmd中python自动转换为gbk格式。
问题4,在cmd中,输入中文,结果正常。道理和在编辑器中一样。整体环境是gbk格式。输出环境也是gbk格式。
问题5,利用reload(sys),sys.setdefaultencoding(‘utf-8’),str.encode()= str.decode(sys.getdefaultencoding()).encode()
结论:保持终端和文本的编码方式一致
【补充 2017-12-4】
有时候不明白一个东西,往往是混淆了太多的概念。对一些基本概念进行梳理总结一番。
位(bit):0/1。储存容量的计量单位。
字节(byte):八位。储存容量的计量单位。
字符(character):计算机中使用的文字和符号。一个占一个字节位置或者多个字节单位。
字符串(String):一个或多个字符构造。
二进制(binary):用0,1数码表示数据(字符)的方式。在python中,以0b开头,如:0b11表示十进制3。
十六进制(Hexadecimal):用0-9,A-F数码表示数据(字符)的方式。计算机只能识别0,1,但用二进制表示数据太长,人不易读,所以可以用十六进制表示。注意这与实际储存在计算机里的容量没有关系,占用多少内存就是多少内存,十六进制只是表示方式。在python中以0x或\x开头,如:0x11表示17。
字符集(Character set):字符的集合。常见的字符集:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集。
解码(decode):数据在不同格式之间的转换。解码是针对计算机而言的,可以理解将计算机不明白的东西解释给计算机听(当然实际上并不是这样),也就是将计算机读不懂的数据转换成计算机里已经储存好的信息(字符集),让计算机明白。
编码(encode):解码的逆过程。
字符集编码方式:字符集的编码规则。字符集都是计算机信息,表示一个个人类可以读懂或者需要的符号。对于不同字符集,它们都有各自的编码方式(规则)。常见的编码方式:ASCII、GBK、GB2312、CP936、UTF-8、UTF-16。
在python2.7中,有两种类型的字符集。一个是str主导的,另一个是unicode。str类型数据编码格式取决于具体环境。在Windows系统cmd中编码方式为cp936(查看命令chcp)。在编辑器中,若在第一行输入了#coding:utf-8,编码方式则为utf-8。
另外,转载一篇关于python2.7编码的文章,写得很详细。
转载:https://www.cnblogs.com/liaohuiqiang/p/7247393.html
- Python2.7<中文编码>
- python2.7中文编码
- python2.7中文编码报错问题
- Python2 中文编码处理
- python2 中文编码问题
- python2 中文编码问题
- python2 中文编码问题小结
- Python2.7 编码问题
- Python2.7 字符编码
- python2.7编码
- Python2.7编码问题
- python2.7编码
- python2.7 编码问题
- python2.7编码问题
- 【编码】Python2.x的中文显示方法
- Python2获取中文文件名的编码问题
- Python2.x 中文md5编码问题
- python2.7--字符串和编码
- NIO selector原理浅析
- Edit Distance(dp)
- 【整理】负载测试、压力测试、性能测试的区别
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
- android入门(五大布局)
- python2.7中文编码
- 修改树状控件TreeCtrl的节点名称
- 第六次上机作业Define a concrete class intset&&EOJ2853
- 20170315 c++上机作业—两个类的交互
- 查看APK的签名信息
- php5.4升级到php7
- base64
- 44_面向对象_17_封装
- ==和equals的区别