zoukankan      html  css  js  c++  java
  • python2的编码问题小结

    对于python2,经常会遇到编码问题,在此小记一下。

    Python2默认的编码解码方式是ascii码,这点要牢记。

    windows系统默认是gbk编码的,可以使用chcp查看:936,那就是GBK简体中文

    PS G:wayne-personalUserInfo> chcp                 #活动代码页: 936

    在实际编码过程中,我们会用到很多中文,面对python2默认的ASCII编码,为了不使包含中文的程序报错,也是为了符合国际通用惯例,一般将我们的文件编码设置为utf-8格式。这就是我们一般看到的在文件首行声明#-*- coding:utf-8 -*- 的原因。

    另外,如果在python中进行编码和解码的时候,不指定编码方式,那么python就会使用defaultencoding。 而python2.x的defaultencoding是ascii,因此会经常出现'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 编码报错,这时我们可以添加下列代码指定python的encoding方式:

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

    再有一点:在python2中,有两种不同的字符串数据类型,一种是 “str”对象,存储着字节,如果在字符串前使用一个’u’的前缀,表示的是这个字符的Unicode码点,即unicode对象,这是两种不同的对象,虽然这两种都可以叫string,但是有时是不一样的东西,这点需要尤其注意,如果不注意这点会出现常见的UnicodeEncodeError 和 UnicodeDecodeError 异常。

    解决办法是encode与decode:unicode对象-encode→str对象,str对象-decode→unicode对象。其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,u.encode是将unicode类按给定的编码方式转换成字节流str。注意:调用encode方法的是unicode对象,生成的是字节流;调用decode方法的是str对象(字节流),生成的是unicode对象。若str对象调用encode会默认先按系统默认编码方式decode成unicode对象再encode,忽视了中间默认的decode往往导致报错。

    好记性不如烂笔头,每天记录一点点
  • 相关阅读:
    类和函数傻傻分不清楚?三个例子讲明白
    使用Python进行数据降维|线性降维
    上班摸鱼系列|Python开发命令行斗地主
    常用统计检验的Python实现
    快速提高Python数据分析速度的八个技巧
    Python解放双手系列——用python自动追踪你的快递
    收下这份来自GitHub的神器,一图搞定Matplotlib!
    mysql插入中文乱码
    DeepLearning4J
    jsp标签之jsp:setProperty用法
  • 原文地址:https://www.cnblogs.com/wayneliu007/p/9911601.html
Copyright © 2011-2022 走看看