python的编码问题
前两天理解了unicode、utf-8、gb2312这些编码之间的关系以后,今天终于弄明白了在python里面的编码问题。我们在写python脚本时如果有中文的字符串,在运行的时候有可能会报错也有可能会出现乱码。一般加上# -*- coding:utf-8 -*-就不会报错了,但是还可能有乱码问题,而且同样的代码在不同的编辑器中得出的结果还有可能不一样,你是否也遇到过这些问题而且理不清头绪?希望我的讲解能让你对这个问题有一定的理解。
对于python的一个脚本来说有三种编码:
1. 脚本文件的编码
脚本保存时的编码格式,不同的编辑器采用的格式不同会造成一定的混乱,一般是utf-8或者cp936(windows上)
2. python解析器的编码
python默认使用ascci编码,所以如果你的脚本中出现了中文,用ascci编码区解析一定会出错,因为ascci不没有utf-8,cp936里面的中文字符的。所以你要在脚本的第一行加入# -*- coding:utf-8 -*-注释来通知python解析器使用utf-8,但是这个只是通知一下python而不是真的用utf-8的编码区解析这里的中文字符串。例如,你写了一个脚本保存的编码是cp936的,如果不加入注释一定会在运行时报错,因为ascci不包括cp936里面的字符,而你写了第一行的注释就不会报错了因为utf-8中有这个字符,但是字符的含义未必是那个中文,它仅仅是处理一下。这里有个地方需要注意如果你的脚本保存时的编码是utf-8的就不需要第一行的注释,python会正确识别。我个人理解是python只识别utf-8和ansi两种格式的文件,ansi格式的需要明确指出coding,否则python默认使用ascci来处理
3. 运行脚本的环境的编码
如果运行环境的编码格式与脚本文件的格式相同就正确显示,不同就是乱码,因为运行环境会进行解码
还是看看代码吧:
# -*- coding:utf-8 -*- #如果没有这句会报错,默认的ascci无法解析cp936编码
# cp936编码保存
str = 'abc中文'
print str #cmd中正确显示,因为cmd是cp936编码
ustr = u'abc中文' #报错,因为无法用utf-8的格式去对cp936进行解码,
ustr1 = unicode(str, 'cp936') #正确, 因为解码用的编码与文件存储的编码相同
=============================================
# utf-8编码保存
str = 'abc中文'
print str #cmd #不会报错但是显示为乱码,如果放到cygwin中执行显示正确,因为cygwin的bash是utf-8的
us
相关文档:
小白和小菜是大学同学,这不快要毕业了,俩人一合计,找个培训班学点东西,武装一下头脑,顺便解决就业问题。
“你们要报哪个班啊?”接待他们的年轻小姐热心地问道。
“你们这里哪个班最好?”小白不假思索地说,“当然是报最好的班啦。”
“我们公司的培训项目都很好”小姐笑 ......
这两天在学习python语言,也学着写了个通讯簿,练习入门下!
功能包括以下:
1、增加一条记录
2、删除一条记录
3、修改一条记录
4、查询一条记录
5、显示整个通讯簿
6、帮助提示
7、版本显示
8、退出等
首先建立一个Person类,即Person.py文件,用来保存联系人记录:
class Person:
def __init__(self, nam ......
当python中间处理非ASCII编码时,经常会出现如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的数字,python在默认的情况下认为语言的编码是ascii编码,所以无法处理其他编码,需要设置python的默认编码为所需要的编码。
一个解决的方案是 ......
#filename Seek.py
import unicodedata
import sys
import os
class Seek():
"""
功能:查找中文,并替换成指定字符或字符串
使用方法:python脚本用法
参数说明:
-d& ......
对于个人版,使用了.NET,安装完企业版后,看了看目录,发现大量python脚本。dll中也有sqlite3.dll
C:\Program Files\China Mobile\Efetion目录下文件:
Addin
boost_python.dll
bz2.pyd
dbghelp.dll
EFetion.exe
EFetion.exe.manifest
EFWP.exe
EFXLiveUpdate.exe
EFXLiveUpdate.exe.manifest
Face
Help.chm
......