python的str()对于unicode来说并不等于encode utf-8 不能简写

本文纠正了关于Python中str()方法等同于unicode.encode('utf-8')的观点。实际上,这种等价关系依赖于Python内部编码被设置为utf-8,这需要通过`reload(sys)`和`sys.setdefaultencoding('utf-8')`来实现。但需要注意,该设置并非普适,且在不同操作系统上可能有不同的表现,例如在Mac和Linux上,并不会默认将str()理解为UTF-8编码,导致可能会遇到编码错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章说错了。。。

str 方法相当于 unicode.encode("utf-8") 是有前提条件的。。。

这个前提条件就是:  预先设置了Python的内部编码为utf-8,也就是执行了


>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("utf-8")

也就是说,str 的编码,实际上是 缺省使用了内部默认编码参数的,并不是之前想的说,一定就是utf-8编码。

而且要注意的是 【必须是Python里面设置utf-8】系统环境本身是utf-8都没用.....


所以为了普适性,还是不能在需要encode utf-8的地方,来str


-----------------

在办公室电脑上reload了utf-8,但是回来在mac上测试代码的时候发现,mac下居然报错了,大吃一惊!!!

又ssh上Linux上测试,发现Linux结果和Mac一样,顿时不淡定了,以为是办公室电脑上自己改了源代码(这事经常做,改了那些源码自己都要不记得了),但是仔细想了想,应该没有改到str上去。

开始怀疑,是不死在Windows上str 才等于utf-8 又远程桌面上另外一台Windows上测试,发现另外一台Windows也是不行会报错。。。这个时候,才意识到,哦。。。。原来我之前在办公室电脑上测试的时候,是 reload sys, set utf-8的了的






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值