作家
登录

不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码

作者: 来源: 2017-12-18 16:59:26 阅读 我要评论

  1. >>> print '--%s--' % ss 
  2.  
  3. --涓?- 
  1. >>> s = '\u4e25' 
  2.  
  3. >>> s 
  4.  
  5. '\\u4e25' 
  6.  
  7. >>> us = s.decode('unicode_escape'
  8.  
  9. >>> us 
  10.  
  11. u'\u4e25' 

十六进制格局的字符串

有时刻,也会看到类似如许的str,’\xd1\xcf’, 看起来也很熟悉,跟汉字“严”的gbk编码’xd1xcf’很像,差别在于前者多了一个‘’, 如许就无法解释成一个十六进制了。解决办法是python-specific-encodings中的string_escape

  1. >>> s='\\xd1\\xcf' 
  2.  
  3. >>> s 
  4.  
  5. '\\xd1\\xcf' 
  6.  
  7. >>> print s 
  8.  
  9. \xd1\xcf 
  10.  
  11. >>> news = s.decode('string_escape'
  12.  
  13. >>> news 
  14.  
  15. '\xd1\xcf' 
  16.  
  17. >>> print news 
  18.  
  19. 严 

给读者的一个问题

在这里留下一?问题:

  1. u'严' == '严' 

返回值是True 照样 False呢?当然这里有意省去了高低文情况,不过明白的说,在不合的编码情况下,谜底是不一样的,原因都在上文中!

总结与建议

不管怎么样解释,python2.x中的字符编码照样一件让人头疼的工作,即使搞懂了,之后碰到了也可能忘记。对于这个问题,诸多建议如下:

我们项目组一值应用Python2.7,固然我们也知道Python3的诸多好处,也曾经擦掌磨拳过,但因为各类汗青原因,以及营业的压力,我们只可能持续应用Python2.7。更悲哀的是,我们组不是那么international,所以代码中照样涉及到大年夜量的中文,是以有时也会碰到乱码以及UnicodeError,于是生活在了小看链的末尾。

第一:应用python3,就不消再纠结str于unicode了;然则这个很难开辟者说了算;

第三:对于中文字符串,不要用str表示,而是用unicode表示;实际中也不好实施,大年夜家都不肯意多写一个u

  1. import sys 
  2.  
  3. reload(sys) 
  4.  
  5. sys.setdefaultencoding('utf-8'

第四:只在传输,或者持久化的时刻对unicode进行encode,相反的过程时decode

  1. >>> a = '严' 
  2.  
  3. >>> b = u'严' 
  4.  
  5. >>> c = a + b 
  6.  
  7. Traceback (most recent call last): 
  8.  
  9. File "<stdin>", line 1, in <module> 
  10.  
  11. UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 

      推荐阅读

      能拍照,还能视频通话?coolpad Dynobot儿童智能手表让你惊艳

    市面上的绝大部分儿童手表都不能拍照,最大卖点的只是语音通话功能。Dynobot是市面上仅有的配备两个摄像头的儿童手表,支持480P视频通话。表盘30万像素满足孩子自拍需求,顶部200万像素摄像头可以拍孩子看到的任何画>>>详细阅读


    本文标题:不想再被鄙视?那就看进来! 一文搞懂Python 2字符编码

    地址:http://www.17bianji.com/lsqh/39888.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)