标签:
编码(encode):unicode转化为str类型
解码(decode):将str类型转化为unicode
在python脚本中添加如下这行:
#! /usr/bin/env python # -*- coding: utf-8 -*-
脚本按所设置的编码类型进行保存和读取;
注:# -*- coding: utf-8 -*- 必须放在第一行或者第二行;
# /usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘syc‘ print ‘中文‘.encode(‘utf-8‘)
结果:
Traceback (most recent call last): File "F:/hz_viking/PycharmProjects/django_demo/WebBase/WebBase/unicodePy.py", line 6, in <module> print ‘中文‘.encode(‘utf-8‘) UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128)
原因:‘中文‘是str类型的;当进行编码的时候,python 就会使用 sys.defaultencoding 指明的方式来解码,然后再进行编码;sys.defaultencoding默认是 ascii编码;所以就会出现ordinal not in range(128);
解决办法:
1.
# /usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘syc‘ print ‘中文‘.decode(‘utf-8‘).encode(‘utf-8‘)
先进行utf-8解码成unicode;然后再进行编码;
2.修改defaultencoding值
# /usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘syc‘ import sys reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 sys.setdefaultencoding(‘utf-8‘) print ‘中文‘.encode(‘utf-8‘)
# -*- coding: utf-8 -*-
与
sys.setdefaultencoding(‘utf-8‘)
是两个不同的概念。
第一种:是指定当前程序文件的编码方式。即编译器在解析code是认为code是哪种编码方式。如果不像第一种那样指定,我们的程序中是不能以中文声明字符串的。
第二种:是指定了python的unicode类型使用何种编码来存储unicode字符串。如果不声明,默认使用ascii。
总结:在编码转换时首先要将该数据以文件定义的编码格式换成unicode码,再将这个unicode按制定的编码进行编码;
标签:
原文地址:http://my.oschina.net/u/257801/blog/518056