字符串還有一個(gè)編碼問題。
因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果要處理文本艺普,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte)鉴竭,所以歧譬,一個(gè)字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),0 - 255被用來表示大小寫英文字母搏存、數(shù)字和一些符號瑰步,這個(gè)編碼表被稱為ASCII編碼,比如大寫字母<font color=#ff0000>A</font>的編碼是<font color=#ff0000>65</font>璧眠,小寫字母 <font color=#ff0000>z</font> 的編碼是<font color=#ff0000>122</font>缩焦。
如果要表示中文,顯然一個(gè)字節(jié)是不夠的责静,至少需要兩個(gè)字節(jié)袁滥,而且還不能和<font color=#ff000>ASCII</font>編碼沖突,所以灾螃,中國制定了<font color=#ff0000>GB2312</font>編碼题翻,用來把中文編進(jìn)去。
類似的腰鬼,日文和韓文等其他語言也有這個(gè)問題嵌赠。為了統(tǒng)一所有文字的編碼,<font color=#ff0000>Unicode</font>應(yīng)運(yùn)而生垃喊。Unicode把所有語言都統(tǒng)一到一套編碼里猾普,這樣就不會再有亂碼問題了。
Unicode通常用兩個(gè)字節(jié)表示一個(gè)字符本谜,原有的英文編碼從單字節(jié)變成雙字節(jié)初家,只需要把高字節(jié)全部填為0就可以。
因?yàn)镻ython的誕生比Unicode標(biāo)準(zhǔn)發(fā)布的時(shí)間還要早,所以最早的Python只支持ASCII編碼溜在,普通的字符串<font color=#ff0000>'ABC'</font>在Python內(nèi)部都是<font color=#ff0000>ASCII</font>編碼的陌知。
Python在后來添加了對Unicode的支持,以Unicode表示的字符串用u'...'表示掖肋,比如:
print u'中文'
中文
注意: 不加 u 仆葡,中文就不能正常顯示。
Unicode字符串除了多了一個(gè)u之外志笼,與普通字符串沒啥區(qū)別沿盅,轉(zhuǎn)義字符和多行表示法仍然有效:
轉(zhuǎn)義:
u'中文\n日文\n韓文'
多行:
u'''第一行
第二行'''
raw+多行:
ur'''Python的Unicode字符串支持"中文",
"日文",
"韓文"等多種語言'''
如果中文字符串在Python環(huán)境下遇到 UnicodeDecodeError,這是因?yàn)?py文件保存的格式有問題纫溃⊙В可以在第一行添加注釋
# -*- coding: utf-8 -*-
目的是告訴Python解釋器,用UTF-8編碼讀取源代碼紊浩。
然后用編輯器(Notepad++ 無BOM格式) 另存為... 并選擇UTF-8格式保存窖铡。