python Unicode编程

ASCII 美国标准信息交换码

UTF-8 8为UTF转换格式(无符号字节序列,长度为1-4个字节)

UTF-16 16位UTF转换格式(无符号字节序列,通常是16位长,两个字节)

Unicode可以表示超过90000个字符。

ASCII字符串成了StringType,而Unicode字符串成了UnicodeType类型。它们的行为是非常相近的。string模块里面都有相应的处理函数。string模块已经停止了更新,只保留了ASCII码的支持,string模块已经不推荐使用,在任何需要跟Unicode兼容的代码里都不要在用该模块。

python把硬编码的字符串叫做字面上的字符串,默认所有字面上的字符串都用ASCII编码,可以通过在字符串前面加一个‘u'前缀的方式声明Unicode字符串,这个’u'前缀告诉python后面的字符串要编码成Unicode字符串。

codec

codec是COder/DECoder的首字母组合。它定义了文本跟二进制值的转换方式,跟ASCII那种用一个字节把字符转换成数字的方式不同,Unicode用的是多字节。这导致了Unicode支持多种不同的编码方式。比如说codec支持:ASCII, ISO 8859/Latin-1, UTF-8, UTF-16

UTF-8编码可以用1-4个字节来表示其他语言的字符,CJK/East这样的东亚文字一般都是用3个字节来表示,那些少用的、特殊的或者历史遗留的字符用4个字节来表示。ASCII字符的UTF-8编码跟ASCII编码完全相同。

编码解码

Unicode支持多种编码格式,当你向一个文件写入字符串的时候,你必须定义一个编码(encoding参数)用于把对应的Unicode内容转换成你定义的格式,python通过Unicode字符串的encode()函数解决了这个问题,该函数接受字符串中的字符为参数,输出你指定的编码格式的内容。

所以,每次我们写一个Unicode字符串到磁盘上我们都要用指定的编码器给它“编码”一下。相应地,当我们从这个文件读取数据时,我们必须“解码”该文件,使之成为相应的Unicode字符串对象。

获取文件的编码

import sys
print(sys.getdefaultencoding())


设置python文件的编码

#encoding=utf8
#设置文件的编码
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())


将gbk文件转换为utf-8文件

#encoding=utf8
#设置文件的编码
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())
#读文件操作
#使用codec包进行文件的读取,在使用open()函数时指定编码的类型:
text_file = codecs.open("liter_time.10", "r", encoding="gbk")
out_file = codecs.open("out.txt", "w", encoding="utf-8")
for line in text_file:
    print(line)
    out_file.write(line.encode('utf-8'))
    break

text_file.close()
out_file.close()



#encoding=utf-8
for line in open("199801.txt"):
    print(line)
    #以gbk编码格式读取,并转换为utf-8
    line=line.decode('gbk','ignore').encode('utf-8')
    print(line)
    break


line=line.decode('gbk','ignore').encode('utf-8')
因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;

如果设置为ignore,则会忽略非法字符;

如果设置为replace,则会用?取代非法字符;

如果设置为xmlcharrefreplace,则使用XML的字符引用

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值