2012-04-03 88 views
0

這是一個完整的noob問題....python中的字符串變體 - 它們是什麼意思?

但爲什麼在一些Python字符串顯示爲:

{u'foobar: u'bar} 

而其他如出現:

{foobar: bar} 

他們是等價?你如何在兩者之間進行轉換?

+0

需要注意的是,所有字符串都是Python 3.x中的Unicode字符串。 – 2012-04-03 23:13:43

+0

另請參閱Ned Batchelder關於Unicode的25分鐘講座。他非常好地解釋了Unicode與字符串的區別。 http://nedbatchelder.com/text/unipain.html – 2012-04-03 23:54:13

回答

3

u前綴表示字符串是Unicode ..

http://docs.python.org/reference/lexical_analysis.html

請參見2.4.1:

'u' 或 'U' 的前綴,使字符串Unicode字符串。 Unicode 字符串使用由Unicode 聯合會和ISO 10646定義的Unicode字符集。下面描述的一些其他轉義序列 可用於Unicode字符串。在Python 2中忽略'b'或'B'的前綴 ;它表示文字在Python 3中應該成爲 字節字面值(例如,當代碼自動轉換爲 時爲2to3)。 'u'或'b'前綴可以後跟'r'前綴。

正如你所看到的,Python將能夠自動比較各種編碼的字符串:

>>> a = u'Hello' 
>>> b = 'Hello' 
>>> c = ur'Hello' 
>>> a == b 
True 
>>> b == c 
True 

您可以瞭解更多關於在Python Unicode字符串(以及如何轉換或編碼字符串)通過參考documentation

2

使用u'string'定義該字符串是unicode類型。

>>> type('hi') 
<type 'str'> 
>>> type(u'hi') 
<type 'unicode'> 

您可以在uncode documentation page中閱讀關於它的全部內容。

3

不,他們是不等價的

的「U」是前綴字符串意味着它的統一。 Unicode被設計爲擴展字符集以適應不是英語的語言。你可以閱讀這個有趣和非技術性的Unicode歷史。

http://www.reigndesign.com/blog/love-hotels-and-unicode/

由於Lattyware提到,在Python 3.x中,所有的字符串都是Unicode。

如果您正在使用Python 2.x,尤其是Web,值得確保您的程序正確處理Unicode。很多人喜歡抱怨不支持Unicode的網站。

相關問題