十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
可以认为一个是用的是str方法,目的是向终端显示;一个用的repr方法,目的是把数据结构和类型表达出来
成都创新互联公司企业建站,十年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于成都网站设计、成都网站建设中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。
这是 Python 2 特别讨厌的一点,以至于我实在忍受不了写了个 repl_py27 来绕过该问题。不过最终还是迁移到 Python 3 啦 =w=
Python 2 的世界是个 ASCII 的世界,unicode 是后来加的,所以使用 repr 显示的时候是把所有非 ASCII 的字符转义显示的。你要直接把字符串写出来的话,Python 2 就不会进行任何转义了,于是在支持的终端上,中文就能正常显示了。
print 遇到非字符串时,会调用 str() 函数将对象转成字符串再输出:
class T(object):
... def __repr__(self):
... return 'repr'
... def __str__(self):
... return 'str'
...
print T()
str
而很多对象的 __str__ 方法是没有定义的,于是 str() 函数改调用它的 __repr__ 方法。
又:Python 2 的字符串和 unicode 的 str() 输出都是经过转义的。这也是我讨厌 Python 2 的另一个重要原因:
u'中文'
u'\u4e2d\u6587'
'中文'
'\xe4\xb8\xad\xe6\x96\x87'
python os 路径被转义的问题,以前常碰到字符串前面加r的情况,不加r有时候有问题有时候没有,也就没深究,这次就碰到一个问题搞了半天发现就是这里路径被转义了。
文件路径中的单双正反斜杠/ \ // \的意义
在python中反斜杠 \ 的功能是转义,例如:\n表示换行,\t 表示水平制表符,也就是tab键。在windows中 反斜杠 \ 也用来表示路径分隔符。
例:
这里\n表示换行,所以输出到K:\imageData就换行了,\4表示输出两个空格,\0 表示八进制编码的ASCII,\0后面的两位数就是8进制数表示的ASCII值,\0后面的8进制数44表示为十进制是4*8+4=36,在ASCII表中正好对应$符号。
如果是在os.path.join()中生成的路径,没法显示的用手改,可以配合split() 和 str.join()方法解决
split("\")把所有有 \ 的地方断开,返回一个列表
rsplit("\",1)把最后出现"\"的地方断开返回一个列表
rsplit()取负数时退化为split()方法
import urllib
rawurl=xxx
url=urllib.unquote(rawurl)
所用模块:urllib
所用函数:urllib.unquote()
案例
import urllib
rawurl = "%E6%B2%B3%E6%BA%90"url = urllib.unquote(rawurl)print url
输出
河源
问题扩展
urllib.unquote()目的是对url编码进行解码,与该函数对应的是编码函数urllib.quote()
123
import urllib urllib.quote("河源")'%E6%B2%B3%E6%BA%90
URL为何要编码、解码?
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以符号分隔,如/s?q=abcie=utf-8。如果你的value字符串中包含了=或者,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的和=符号进行转义,也就是对其进行编码。
又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。