編碼(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按制定的編碼進行編碼;