配置:python 2.7 + sublime text 2 + os x 10.10本文意在理清各種編碼的關係並以此解決 python 中的編碼問題。
只有先了解字元表、編碼字符集、字元編碼三者的基本概念,才能直入編碼問題的核心。
字元表是乙個系統支援的所有可讀或者可顯示的抽象字元的集合。也就是說字元表裡面的元素是可顯示的字元。例如:「a」、「b」、「文」這樣的元素。
編碼字符集是這樣的乙個集合,集合中的元素是字元在字元表中的位置。例如元素 65 代表字元 「a」 在字元表中的位置。
計算機統一使用 unicode 作為編碼字符集。
由於 unicode 這個編碼字符集十分龐大,每個元素都需要用好幾個位元組表示,為了節省儲存空間以及資料傳輸成本。人們使用字元編碼將 unicode 表示的字串轉換成位元組序列。
將位元組序列轉換成 unicode 編碼的過程稱為解碼(decode);將 unicode 編碼轉換成位元組序列的過程稱為編碼(encode)。
記住字元編碼的目的是為了節省儲存空間以及資料傳輸成本。
常見的字元編碼有 ascii、utf-8、gbk等,應用最廣泛的字元編碼是 utf-8 。
^^ 版權銜接線 vv 全文出處:
python 出現的時候 unicode 的標準還沒制定好,所以 python 2 只支援 ascii 編碼字符集。ascii 編碼字符集和 ascii 字元編碼是同乙個集合,也就是說 ascii 碼是沒有進行轉換直接進行儲存的。
所以 python 中的字串預設只支援 ascii 中的字元,為了支援 unicode 字元,需要在包含 非 ascii 碼字元的字串前面新增u
,像這樣:
u"中文"
python 預設支援的字元編碼也是 ascii,一般都不夠用,我們通常希望將其編碼為 utf-8(utf-8 without bom),為了實現這一目標,需要在檔案頭部進行字元編碼宣告,並將檔案儲存為 utf-8 格式。
字元編碼宣告必須放在檔案的前兩行,宣告方式如下:
# -*- coding:utf-8 -*-
或者,
#coding=utf-8
python 對這類宣告的格式要求比較嚴格,所在位置錯誤或者中間多新增空格都會導致宣告失效。
在 st2 中,即使進行了正確的設定,依然會出現錯誤unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
。這是由於 st2 在輸出字串時無法識別 python 對標準輸入輸出的編碼,而預設使用了 ascii 編碼,解決方案是這樣的,通過sublime text 2 -> preference -> browse packages
找到 python 資料夾,開啟python.sublime-build
檔案,新增乙個 env 域:
"env": ,
另乙個解決方案是在.py
檔案中對字串進行顯式的編碼,例如:
print u"中文".encode("utf-8")
關於該問題的詳細描述參見 有關 python 2 和 sublime text 中文 unicode 編碼問題的分析與理解 。
最後新增乙個例子以方便理解。
檔案python.sublime-build
:
,
"selector": "source.python"
}
檔案sample.py
:
#! /usr/bin/env python
#coding=utf-8
print u"你好,"
print u"我是唐衣可俊!".encode('utf-8')
輸出:
你好,
我是唐衣可俊!
十分鐘搞清字符集和字元編碼(對字符集和字元編碼進行了比較系統詳盡的介紹)
有關 python 2 和 sublime text 中文 unicode 編碼問題的分析與理解(關於 st2 對 unicode 字元輸出報錯的問題進行了詳細的分析)
python的字元編碼
1 字元編碼 將人類的字元編碼 轉換成計算機能識別的數字 這種轉換必須遵循一套固定的標準,該標準無非是 人類字元與數字的對應關係,稱之為字元編碼表 0001 1011 a 0000 0000 b 0000 0001 c 0000 0002 d 0000 0003 bit 二進位制位 bytes 位元...
python 的字元編碼
unicode編碼 unicode編碼為世界上所有字元都分配了乙個唯一編號,為十六進製制,如中文簡體漢字 渣 的 unicode編號就是 6e23,unicode僅僅定義了每個字元的編號,並沒有定義如何將這個編號進行儲存的方式,所以後來出現了utf 8,gbk等編碼格式,它們都是 unicode 的...
Python 的字元編碼
在py2中,有兩種字串型別 str型別和unicode型別 str和unicode分別存的是位元組資料 編碼不確定直譯器解釋 和unicode資料 python 2.7.10 default,oct 6 2017,22 29 07 type help credits or license for m...