编码(encode):unicode转化为str类型 python
解码(decode):将str类型转化为unicode django
在python脚本中添加以下这行: 编码
#! /usr/bin/env python # -*- coding: utf-8 -*-
脚本按所设置的编码类型进行保存和读取; spa
注:# -*- coding: utf-8 -*- 必须放在第一行或者第二行; code
# /usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'syc' print '中文'.encode('utf-8')
结果: 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); ci
解决办法: unicode
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按制定的编码进行编码;