python學習——基礎(二)

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

相關文章
相關標籤/搜索