2017-02-22 97 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'