2014-11-04 58 views
1

我在交互式Python 2.7終端(終端默認輸出爲「utf-8」)。我從互聯網上一個字符串,讓我們把它叫做a終端中的Python字符處理

>>> a 
u'M\xfcssen' 
>>> a[1] 
u'\xfc' 

我不知道爲什麼它的價值是不是ü所以我儘量

>>> print(a) 
Müssen 
>>> print(a[1]) 
ü 

如預期其中工程。

所以,我的第一個問題是,print a做什麼,如果我只輸入a,這是缺少的?

出於好奇:爲什麼我在同一個python終端會話中爲以下內容獲得另一個輸出?

>>> "ü" 
'\xc3\xbc' 
>>> print "ü" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/codecs.py", line 351, in write 
    data, consumed = self.encode(object, self.errors) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128) 
>>> print u"ü" 
ü 

回答

1

你必須瞭解python如何存儲各種數據類型以及哪些函數需要哪些輸入。它的一切都很混亂,也取決於您的終端的LOCALE設置。

以下鏈接可能有助於減少這樣的困惑:https://pythonhosted.org/kitchen/unicode-frustrations.html

所有str對象,如"My String"存儲爲每個字符8位。在你的情況下,'\xc3\xbc'是作爲str對象的UMLAUT-U的utf8表示。

對於unicode對象,python使用16位或32位整數來存儲字符串。

現在print函數預計str對象作爲輸入。這就是爲什麼以下工作。

>>> print '\xc3\xbc' 
ü 

要打開元音變音-U從strunicode對象。您必須先告訴python該字符串在將其轉換爲unicode對象之前已使用UTF8表示。

>>> unicode('\xc3\xbc'.decode('utf8')) 
u'\xfc' 
1

什麼print a做什麼,這是,如果我只需要輸入a失蹤?

交互式>>>提示使用由repr()函數返回的值的Python源代碼表示形式輸出值。這就是爲什麼你得到ü字符不僅僅是\xFC,而且字符串周圍還有引號。該提示正試圖向您顯示您需要鍵入Python程序以獲取您所擁有的字符串值。

print語句輸出該值的原始字符串轉換,如str()函數返回的那樣。

對於某些類型repr()str()會生成相同的輸出,但字符串並非如此。