2017-02-22 95 views
-1

據我所知,Python 2.7字節的字符串只取ASCII字符,我不知道爲什麼下面的工作?看起來ü是以其他格式編碼的,你能解釋一下嗎?Python 2.7字符串中的非ASCII字符

>>> s = "Flügel" 
>>> s 
'Fl\x81gel' 
+0

否,Python的字節串採取任何* *字節在0-255範圍內(十六進制0x00到0xFF),而不僅僅是0-127(0x00-0x7F)的ASCII範圍。 –

+0

Python 2.7字節的字符串需要字節序列 - 不只是ASCII字符。字節可以具有'0x00' - >'0xff'的任意值。 – mgilson

+0

當你鍵入'ü'時,你的終端發送字節0x81,這就是存儲的內容。 –

回答

2

我明白了Python 2.7字節的字符串只需要ASCII字符,

你誤會了。 Python字節字符串取任何有效字節。字節基本上是0到255之間的整數值(ASCII覆蓋0到127)。

當您在終端或控制檯中打開交互式解釋器提示符後,該終端或控制檯的配置將確定可鍵入併發送到Python的字節。您似乎正在使用一個發送拉丁語文本(number of variants發送0x81ü)。 Python將它存儲在字節串中。

您可以通過查看sys.stdin.encoding來查看使用的編解碼器。

礦被配置成處理UTF-8,其使用字節來編碼相同的字符(U+00FC LATIN SMALL LETTER U WITH DIAERESIS):

>>> import sys 
>>> sys.stdin.encoding 
'UTF-8' 
>>> s = 'Flügel' 
>>> s 
'Fl\xc3\xbcgel'