这些字符串在Python解释器内部是如何表示的?我不知道';我不明白

这些字符串在Python解释器内部是如何表示的?我不知道';我不明白,python,string,unicode,python-2.7,Python,String,Unicode,Python 2.7,为什么??python中的内部表示之间有什么区别?我自己怎么能看到呢?:) 字符串中有unicode文本 不,没有。字符串中有个字节。Python只是使用创建文件时编辑器保存到磁盘上的字节 当您在字符串前面加上u'前缀时,您向python发出信号,表示您正在创建一个unicode对象。Python现在关注您在源文件顶部指定的编码,并根据您指定的编码将源文件中的字节解码为unicode对象 在这两种情况下,编辑器都将一系列字节保存到文件中,对于€字符,UTF-8编码为三个字节,以十六进制表示为E2

为什么??python中的内部表示之间有什么区别?我自己怎么能看到呢?:)

字符串中有unicode文本

不,没有。字符串中有个字节。Python只是使用创建文件时编辑器保存到磁盘上的字节

当您在字符串前面加上
u'
前缀时,您向python发出信号,表示您正在创建一个
unicode
对象。Python现在关注您在源文件顶部指定的编码,并根据您指定的编码将源文件中的字节解码为
unicode
对象

在这两种情况下,编辑器都将一系列字节保存到文件中,对于
字符,UTF-8编码为三个字节,以十六进制表示为E282AC。因此,bytestring中的最后一个字节是AC,或十进制的172。将最后3个字节解码为UTF-8后,它们一起成为Unicode代码点U+20AC,十进制为8364

您真的应该仔细阅读Python和Unicode:

  • 内德·巴奇尔德

  • 乔尔斯波尔斯基


为什么在字节字符串中包含字节是语法错误?第一个是包含文件中UTF-8字节的
str
对象。第二个是通过对UTF-8进行解码而形成的
unicode
对象。使用
repr()
查看差异。在第一种情况下检查字符串的长度。为什么选择向下?这似乎是一个合理的问题。要想问得更清楚,需要知道答案。仅供参考,这在Python 3中是固定的。哇,非常好的答案,谢谢!我已经阅读了第一个链接,但仍然不理解其中的区别。现在它是水晶般的清晰!:)
# -*- coding: utf-8 -*-

a = 'éáűőúöüó€'
print type(a)    # <type 'str'>
print a          # éáűőúöüó€
print ord(a[-1]) # 172
# -*- coding: utf-8 -*-

a = u'éáűőúöüó€'
print type(a)    # <type 'unicode'>
print a          # éáűőúöüó€
print ord(a[-1]) # 8364