❶ python中u'string'和unicode('string')有什麼區別
首先要弄清楚的是,在python里,string object和unicode object是兩種不同的類型。
string object是由characters組成的sequence,而unicode object是Unicode code units組成的sequence。
string里的character是有多種編碼方式的,比如單位元組的ASCII,雙位元組的GB2312等等,再比如UTF-8。很明顯要想解讀string,必需知道string里的character是用哪種編碼方式,然後才能進行。
Unicode code unit又是什麼東西呢?一個Unicode code unit是一個16-bit或者32-bit的數值,每個數值代表一個unicode符號。在python里,16-bit的unicode,對應的是ucs2編碼。32-bit對應的是ucs4編碼。是不是感覺string里character的編碼沒什麼區別?反正我現在腦子里就是這樣一個印象:在Python里,ucs2或者ucs4編碼的,我們叫做unicode object,其他編碼的我們就叫做string。
至於python里的unicode到底是ucs2還是ucs4的,可以在編譯時指定。例如Linux下,要用ucs2做unicode的編碼,可以這樣
# ./configure --enable-unicode=ucs2
# make
# make install
下載的Windows預編譯版本,一般都是ucs2的。要想知道某個python運行環境是ucs2還是ucs4,可以查看sys.maxunicde,65535就是ucs2的,另一個很大的數值就是ucs4。
下面我們看看string和unicode在python里的不同
我們先看看在簡體中文Windows 2003系統下,系統編碼是GBK
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
4
>>> len(b)
2
在一個系統編碼為UTF-8的Linux環境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
6
>>> len(b)
2
如何?簡單總結一下:
1、string直接用引號來表示,unicode在引號前加一個u
2、直接輸入的string常量會用系統預設編碼方式來編碼,例如在GBK環境下,'你好'會編碼成'/xc4/xe3/xba/xc3',而在UTF-8環境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的位元組數,len(unicode)返回的是字元數
4、很重要的一點,print unicode不會亂碼。現在我們常用的Linux、Windows系統,都是支持unicode的,版本太老的不算。比如Windows 2003支持ucs2,所以在中文Windows2003下,除了可以正常顯示預設的GBK編碼外,還可以正常顯示ucs2編碼。舉個例子,還是在中文Windows 2003的GBK環境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # UTF-8的'你好'
>>> print a
浣犲ソ
>>> b = unicode(a, "UTF-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好
應該明白了吧?
下面再說說string和unicode的相互轉換,什麼unicode()、decode()、encode()、codecs之類的。
❷ python 中文字元串前為什麼加u
u不是針對中文, 可以針對任何的字元串
它代表是對字元串進行unicode編碼.
一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般也就不帶u了
但是中文, 必須表明所需編碼, 否則一旦編碼轉換就會出現亂碼.
建議所有編碼方式採用utf8
❸ python里tuple類型中u是什麼東西
Python的元組與列表類似,不同之處在於元組的元素不能修改;元組使用小括弧(),列表使用方括弧[];元組創建很簡單,只需要在括弧中添加元素,並使用逗號(,)隔開即可,例如:
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";
創建空元組,例如:tup = ();
元組中只有一個元素時,需要在元素後面添加逗號,例如:tup1 = (50,);
元組與字元串類似,下標索引從0開始,可以進行截取,組合等。
❹ python字元串前綴 u和r的區別
以r或R開頭的python中的字元串表示(非轉義的)原始字元串
python裡面的字元,如果開頭處有個r,比如:
(r』^time/plus/d{1,2}/$』, hours_ahead)
說明字元串r"XXX"中的XXX是普通字元。有普通字元相比,其他相對特殊的字元,其中可能包含轉義字元,即那些,反斜杠加上對應字母,表示對應的特殊含義的,比如最常見的」 "表示換行," "表示Tab等。
而如果是以r開頭,那麼說明後面的字元,都是普通的字元了,即如果是「 」那麼表示一個反斜杠字元,一個字母n,而不是表示換行了。以r開頭的字元,常用於正則表達式,對應著re模塊。
以u或U開頭的字元串表示unicode字元串
Unicode是書寫國際文本的標准方法。如果你想要用非英語寫文本,那麼你需要有一個支持Unicode的編輯器。類似地,Python允許你處理Unicode文本——你只需要在字元串前加上前綴u或U。
❺ python中的u和unicode編碼問題!!!!
#-*-coding:gbk-*-
importsys
reload(sys)
printsys.getdefaultencoding()
printu'中文'
printunicode('中文','gbk')
你運行下這個程序,就能看出來,python2默認是ascii,雖然你文件使用的gbk,但是不會影響默認編碼。
print u'中文',這個是直接定義一個unicode字元串。
unicode('中文')這個是生成unicode對象,解釋器會對內容使用默認編碼進行解碼,轉換成unicode,默認的是ascii,所以報錯,你指定gbk就可以了。
如果解決了您的問題請採納!
如果未解決請繼續追問
❻ python 轉義符號\u
\u才是轉義符,而你例中的\\u本身已經取消了轉義。"\\u1234"代表「\、u、1、2、3、4」共6個字元。
❼ python u""是什麼意思'
unicode碼
❽ python中文字元串前為什麼加u
python中文字元串前為什麼加u?因為u可以針對任何字元串。u不只連接漢語, 可以連接所有的字元串。它表示可以對字元串進行unicode編碼.常理來說英文字元在使用各種編碼下, 一般都可以正常解析, 所以一般也就不帶u了。
❾ python這段代碼中u什麼意思
以u或U開頭的字元串表示unicode字元串,
print時,就相當於print "游戲結果\n成績列表",字元串中,轉義字元會進行轉義。
輸出結果就是:
游戲結果
成績列表
別外一種用法,如果想直接輸出"游戲結果\n成績列表",就寫成:
aa=(r"游戲結果\n成績列表")
print(aa)
這樣,\n就不會進行轉義,方便輸出處理反斜杠,
這樣輸出結果就是:
游戲結果\n成績列表