Python字符串編碼

Python字符串與編碼
計算機對文本進行編碼的方式python

ASCII碼
因爲計算機是美國人發明的,所以,最先只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII編碼,好比大寫字母A的編碼是65,小寫字母z的編碼是122。編程

UNICODE碼
因爲計算的的發展與普及,愈來愈多的國家開始使用計算機,然而每一個國家的文字基本都不相同,要經過計算機進行處理的話要進行不一樣的編碼,顯然一個字節的ASCII碼是不夠的。Unicode把全部語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。Unicode標準也在不斷髮展,但最經常使用的是用兩個字節表示一個字符(若是要用到很是偏僻的字符,就須要4個字節)。現代操做系統和大多數編程語言都直接支持Unicode。
捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼一般是2個字節。
若是把ASCII編碼的A用Unicode編碼,只須要在前面補0就能夠,所以,A的ASCII碼是01000001,Unicode編碼是00000000 01000001。編程語言

UTF-8碼
在統一使用UNICODE編碼以後,全部的語言都不衝突了,也沒有亂碼了,可是又出現了另外一個問題:若是你寫的文本基本上所有是英文的話,用Unicode編碼比ASCII編碼須要多一倍的存儲空間,在存儲和傳輸上就十分不划算。因此此時UTF-8編碼又應運而生:將UNICODE編碼轉化爲可變長度的UTF-8編碼,UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間:函數

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
中 x 01001110 00101101 11100100 10111000 10101101
從上面的表格還能夠發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上能夠被當作是UTF-8編碼的一部分,因此,大量只支持ASCII編碼的歷史遺留軟件能夠在UTF-8編碼下繼續工做。搞清楚了ASCII、Unicode和UTF-8的關係,咱們就能夠總結一下如今計算機系統通用的字符編碼工做方式:
在計算機內存中,統一使用Unicode編碼,當須要保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼。例如在用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件。編碼

Python的字符串與編碼
因爲Python的誕生早於UNICODE編碼的誕生時間,因此最先python僅支持ASCII碼,系統中默認的’ABC’也都是ASCII編碼,python後來添加了對於UNICODE編碼的支持,用u'...'表示,好比操作系統

>>> print u'我是誰?'
我是誰?
>>> u'我是誰?'
u'\u6211\u662f\u8c01\uff1f'

那麼ASCII碼和UNICODE編碼之間如何轉換呢?字符串’xxx’雖然是ASCII碼,但也能夠看做是UTF-8碼,可是u’xxx’只能是UNICODE碼。將u’xxx’轉化爲UTF-8的’xxx’使用.encode(‘utf-8’)函數:.net

>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

反過來,把UTF-8編碼表示的字符串’xxx’轉換爲Unicode字符串u’xxx’用decode(‘utf-8’)方法:code

>>> 'ABC'.decode('utf-8')
u'ABC

Python的格式化輸出
在python中,格式化輸出採用和C語言同樣的方式,不過其變量要採用%符號來做爲前綴。blog

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

對於UNICODE編碼的字符串,其用法也同樣,只是要確保替換的字符串也是UNICODE編碼的字符串。內存

>>> u'Hi, %s' % u'Michael'
u'Hi, Michael'

原文:https://blog.csdn.net/mountzf/article/details/52727735

相關文章
相關標籤/搜索