Python 2.7字节字符串中的非ASCII字符

Python 2.7字节字符串中的非ASCII字符,python,string,python-2.7,ascii,Python,String,Python 2.7,Ascii,我知道Python2.7字节字符串只接受ASCII字符,我想知道为什么下面的方法有效?看起来你是用其他格式编码的,你能解释一下吗 >>> s = "Flügel" >>> s 'Fl\x81gel' 我知道Python 2.7字节字符串只接受ASCII字符 你误解了。Python字节字符串接受任何有效字节。字节基本上是0到255之间的整数值,ASCII覆盖0到127 当您在终端或控制台中打开交互式解释器提示符时,该终端或控制台的配置将决定您可以键入哪些字节并

我知道Python2.7字节字符串只接受ASCII字符,我想知道为什么下面的方法有效?看起来你是用其他格式编码的,你能解释一下吗

>>> s = "Flügel"
>>> s
'Fl\x81gel'
我知道Python 2.7字节字符串只接受ASCII字符

你误解了。Python字节字符串接受任何有效字节。字节基本上是0到255之间的整数值,ASCII覆盖0到127

当您在终端或控制台中打开交互式解释器提示符时,该终端或控制台的配置将决定您可以键入哪些字节并发送给Python。您似乎正在使用一个将拉丁文本发送为u的send 0x81。Python将其存储在bytestring中

您可以通过查看sys.stdin.encoding来检查使用了什么编解码器

Mine配置为处理UTF-8,UTF-8使用两个字节对同一字符进行编码:


不,Python字节字符串接受0-255十六进制0x00到0xFF范围内的任何字节,而不仅仅是ASCII范围0-127 0x00-0x7F。Python 2.7字节字符串接受字节序列,而不仅仅是ASCII字符。字节可以有0x00->0xff中的任意值。当您键入u时,您的终端发送字节0x81,这就是存储的内容。如果我将其粘贴到命令行上的2.7.13中,我会得到一个带有Fl\xc3\xbcgel的str,因此Python或我的终端是以Unicode转储的?这是ASCII码?@NickT;您的终端配置为UTF-8通信,OP使用拉丁语变体,可能是像CP1252这样的Windows代码页。不要混淆编码和Unicode;UTF-8是一种可以编码所有Unicode标准的编解码器,但UTF-16和UTF-32也可以。
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> s = 'Flügel'
>>> s
'Fl\xc3\xbcgel'