这些字符串在Python解释器内部是如何表示的?我不知道';我不明白
为什么??python中的内部表示之间有什么区别?我自己怎么能看到呢?:) 字符串中有unicode文本 不,没有。字符串中有个字节。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
u'
前缀时,您向python发出信号,表示您正在创建一个unicode
对象。Python现在关注您在源文件顶部指定的编码,并根据您指定的编码将源文件中的字节解码为unicode
对象
在这两种情况下,编辑器都将一系列字节保存到文件中,对于€
字符,UTF-8编码为三个字节,以十六进制表示为E282AC。因此,bytestring中的最后一个字节是AC,或十进制的172。将最后3个字节解码为UTF-8后,它们一起成为Unicode代码点U+20AC,十进制为8364
您真的应该仔细阅读Python和Unicode:
- 内德·巴奇尔德
- 乔尔斯波尔斯基
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