字符编码,pyton中的encode,decode,unicode()
来源:互联网 发布:js width 编辑:程序博客网 时间:2024/05/16 15:59
1.在计算机处理的程序中,对字符的处理有两种方式:编码或译码(encoding),解码(decoding)
encoding:将字符串中的字符转换到对应编码字符集对应的代码点
每一个代码点对于了一些数字,计算机真正存的是这些数字
如:
"python",转换到unicode码的对应为:
decoding:将别的编码解析为当前环境的编码,如当前环境是unicode,则
ASCLL, unicode, Latin-1又名ISO-8859-1
ASCLL:表示的范围为:0--127的字符
unicode: 表示的范围为0--(2^16-1)个字符
Latin-1或ISO-8859-1:0--(2^16-1)个字符
UTF-8:(Unicode Transformation Format),8表示使用8位数字编码,
表示的范围很广,有一个字节,两个字节,三个字节存储的
其中:unicode和Latin-1编码的前127个字符编码跟ASCLL一样,后面的unicode和
Latin-1不一样,所以当unicode和latin-1转码为ASCLL时,若都是英文,
是不会出错的,当是中文时,会出错,而当unicode转换为Latin-1时,只转换
大于127的字符编码的字符就可以了
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,
0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF
之间是文字符号。
UTF-8:编码的规则:
1,如果代码点小于128,用一个字节存,这个和ASCLL兼容的
2,如果代码点的范围为128 -- 255,用两个字节存储
3,大于255的有的以三个字节存储,有的以四个字节存储
UTF-8的一些方便的特性:
1,可以操作unicode的代码点
2,一个unicode字符集编码的字符串,存在的编码中不含有0字节,这避免了字节的
排序问题,意味着,utf-8字符串可以使用C风格的函数如strcpy()来处理字符串,
(C语言中遇到0为字符串截至了)
3,一个ASCLL字符串也是有效的UTF-8字符串
4,utf-8使用紧凑压缩,大多数的代码点都转换为两个字节,小于128的转换
在文件的第一或第二句添加:# -*- coding:utf-8 -*-
1,unicode是python中内置的存储类型,这个来源于抽象数据类型basestring,这
也是str的祖先,如果想判断一个字符串类型的值可以这样:
if isinstance(value, basestring),python呈现unicode字符串在16位和32位
之间,这个依赖于相应的解析器
2,unicode()构造函数:
unicode(string, encoding, errors),string是将要被转换为unicode码
的字符串,encoding指定原字符串的字符集,errors有三个值:strict出现
转码错误时,报异常UnicodeDecodeError,replace将其以FFFD存储,ignore
不管这个错误,丢失掉这个字符
不写encoding时,默认为ASCLL码,如:
ord()函数可以将unicode编码格式得到其对应的十进制数字
如:
128的都可以用一些8位字符串类型的操作,如搜索,格式化等:
string.count('e') -->计算字符串string中的e出现的次数
string.find('feather') -->查找在string中出现字串feather的第一个位置
找到返回第一个位置,为找到返回-1
string.replace('from','to'),将string中的所有from替换为to
但如果是大于127的使用这些函数,就会报错,如
改函数为将string编码为指定的编码,error的参数跟unicode()函数类似
但前提是,原来的编码已经是8位数字的编码了,所以,在使用前,应该是:
1,string.decode('utf8').encode('utf8'),decode('utf8'),
将字符串string从utf8解析为unicode码,然后转换为utf8
2,string.decode('gbk').encode('utf8'),将原来的字符串从gbk编码
转换为unicode码,然后转换为utf8
encoding:将字符串中的字符转换到对应编码字符集对应的代码点
每一个代码点对于了一些数字,计算机真正存的是这些数字
如:
"python",转换到unicode码的对应为:
P y t h o n0x50 00 00 00 79 00 00 00 74 00 00 00 68 00 00 00 6f 00 00 00 6e 00 00 00 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
decoding:将别的编码解析为当前环境的编码,如当前环境是unicode,则
string.decode('utf8'),将将字符串从utf8转换为unicode
ASCLL, unicode, Latin-1又名ISO-8859-1
ASCLL:表示的范围为:0--127的字符
unicode: 表示的范围为0--(2^16-1)个字符
Latin-1或ISO-8859-1:0--(2^16-1)个字符
UTF-8:(Unicode Transformation Format),8表示使用8位数字编码,
表示的范围很广,有一个字节,两个字节,三个字节存储的
其中:unicode和Latin-1编码的前127个字符编码跟ASCLL一样,后面的unicode和
Latin-1不一样,所以当unicode和latin-1转码为ASCLL时,若都是英文,
是不会出错的,当是中文时,会出错,而当unicode转换为Latin-1时,只转换
大于127的字符编码的字符就可以了
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,
0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF
之间是文字符号。
UTF-8:编码的规则:
1,如果代码点小于128,用一个字节存,这个和ASCLL兼容的
2,如果代码点的范围为128 -- 255,用两个字节存储
3,大于255的有的以三个字节存储,有的以四个字节存储
UTF-8的一些方便的特性:
1,可以操作unicode的代码点
2,一个unicode字符集编码的字符串,存在的编码中不含有0字节,这避免了字节的
排序问题,意味着,utf-8字符串可以使用C风格的函数如strcpy()来处理字符串,
(C语言中遇到0为字符串截至了)
3,一个ASCLL字符串也是有效的UTF-8字符串
4,utf-8使用紧凑压缩,大多数的代码点都转换为两个字节,小于128的转换
为一个字节
在文件的第一或第二句添加:# -*- coding:utf-8 -*-
当文件中出错时,会报错不支持的ASCLL码,英文中文编码后,大于127,所以报错
1,unicode是python中内置的存储类型,这个来源于抽象数据类型basestring,这
也是str的祖先,如果想判断一个字符串类型的值可以这样:
if isinstance(value, basestring),python呈现unicode字符串在16位和32位
之间,这个依赖于相应的解析器
2,unicode()构造函数:
unicode(string, encoding, errors),string是将要被转换为unicode码
的字符串,encoding指定原字符串的字符集,errors有三个值:strict出现
转码错误时,报异常UnicodeDecodeError,replace将其以FFFD存储,ignore
不管这个错误,丢失掉这个字符
不写encoding时,默认为ASCLL码,如:
例子1: >>> unicode('python') u'python'例子2: >>> unicode('python' + chr(255)) Traceback (most recent call last): ... UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 6: ordinal not in range(128)例子3:>>> unicode('\x80abc', errors='strict') Traceback (most recent call last):...UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0:ordinal not in range(128)例子4:>>> unicode('\x80abc', errors='replace')u'\ufffdabc'例子5:>>> unicode('\x80abc', errors='ignore')u'abc'3,使用unichr()函数可以自定代码点的值,得到对于的unicode表示
ord()函数可以将unicode编码格式得到其对应的十进制数字
如:
>>> unichr(409600) u'\ua000' -> a000 = b1010000 00000000 = 40960 >>> ord(u'\ua000') 409604,因为unicode兼容8位的ASCLL编码,所以,对于英文字符串,或代码的值小于
128的都可以用一些8位字符串类型的操作,如搜索,格式化等:
string.count('e') -->计算字符串string中的e出现的次数
string.find('feather') -->查找在string中出现字串feather的第一个位置
找到返回第一个位置,为找到返回-1
string.replace('from','to'),将string中的所有from替换为to
但如果是大于127的使用这些函数,就会报错,如
>>> s = 'python' >>> s.find('was\x9f') Traceback (most recent call last): ... UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 3: ordinal not in range(128)5,string.encode(encoding, error)函数:
改函数为将string编码为指定的编码,error的参数跟unicode()函数类似
但前提是,原来的编码已经是8位数字的编码了,所以,在使用前,应该是:
1,string.decode('utf8').encode('utf8'),decode('utf8'),
将字符串string从utf8解析为unicode码,然后转换为utf8
2,string.decode('gbk').encode('utf8'),将原来的字符串从gbk编码
转换为unicode码,然后转换为utf8
如:
#原始字符串,包含了代码点为40960的字符,也有小于128的字符串abcd>>> u = unichr(40960) + u'abcd' + unichr(1972) #转换为对应的utf-8编码>>> u.encode('utf-8')'\xea\x80\x80abcd\xde\xb4' #转换为对于的ASCLL码,由于有大于127的代码点,报错>>> u.encode('ascii') Traceback (most recent call last):...UnicodeEncodeError: 'ascii' codec can't encode character u'\ua000' in position 0: ordinal not in range(128) #当参数为ignore时,大于127的代码点的数据丢失>>> u.encode('ascii', 'ignore')'abcd' #有两种替换方式,都可以使用>>> u.encode('ascii', 'replace')'?abcd?'>>> u.encode('ascii', 'xmlcharrefreplace')'ꀀabcd'
- 字符编码,pyton中的encode,decode,unicode()
- python中的编码问题unicode, encode, decode
- Python中的字符编码问题encode/decode
- Python中的decode解码和encode编码
- decode、encode、unicode解码
- Python编码相关问题 Unicode UTF-8 encode() decode()
- python之分析decode、encode、unicode编码转换为汉字
- pyhton字符编码问题--decode和encode方法
- python中文字符编码decode,encode以及乱码解决总结
- python中文字符编码decode,encode以及乱码解决总结
- oracle 利用url encode decode转换字符编码
- Python 列表内字符编码问题,encode和decode
- python中文字符编码decode,encode以及乱码解决总结
- pyhton字符编码问题--decode和encode方法
- unicode .decode /str.encode方法
- python中的decode解码和encode编码使用
- Python中的编码(encode)与解码(decode)
- python中的编码 encode decode setdefautendcoding write print
- 转载tcp参数优化
- struts-2.3.4.1源码 导入eclipse工程
- C#快速扫描线算法——求取倾斜四边形与图片像素点交叠区域
- js Ajax
- 问题—抱怨?人品差?别搞笑了!
- 字符编码,pyton中的encode,decode,unicode()
- Android 启动过程详解
- ThinkPHP3.1快速入门(16)安全
- 电动车特斯拉30宣布与日本松下电器合作,松下将会扩大锂离子汽车电池的供应。
- iOS应用性能调优的25个建议和技巧(转)
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
- 读取深度缓存中的深度值,并将其屏幕2D坐标转化为场景3D坐标
- java连接mysqnl 插入示例
- java.lang.OutOfMemoryError: Java heap space