zoukankan      html  css  js  c++  java
  • python编码遇过的问题

    参照:http://wklken.me/posts/2013/08/31/python-extra-coding-intro.html

    曾经出现过这样的问题

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)是因为对str进行编码
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)是因为对Unicode进行解码
    上面两个都会出错
    来看看判断是否为unicode/str的方法
    >>> isinstance(u'中文', unicode)
    True
    >>> isinstance('中文', unicode)
    False
    
    >>> isinstance('中文', str)
    True
    >>> isinstance(u'中文', str)
    False
    总之不要对str使用encode,不要对unicode使用decode

    一般在开头写上# -*- coding: utf-8 -*-之类的,都会统一源文件要保存的编码,然后在代码里,其他在源代码用作处理的硬编码字符串,统一用unicode,即用u'中文',而不是'中文',这样在代码里面除了外部来的东西里面的就都是Unicode和utf-8了,先获得系统的默认编码,然后再编码,这样就不会乱码了

    chardef包可以检测一个文件是用什么编码的
    >>> import chardet
    >>> f = open('test.txt','r')
    >>> result = chardet.detect(f.read())
    >>> result
    {'confidence': 0.99, 'encoding': 'utf-8'}


    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 32-33: illegal multibyte sequence错误
    Unicode的解码(Decode)出现错误(Error)
    接着看
    'gbk' codec can't decode bytes in position 32-33,在23至33行出现了错误,原因是gbk不能被解码
    因此猜测,是打算以gbk编码方式去解码让字符串变成Unicode,但是这里不能解码,illegal multibyte sequence就是无法解码,
    总结:将一个字符串,通过gbk的方式,去解码,想要获得Unicode字符串,结果出错了
    此种错误,原因是: 
    要处理的字符串本身不是gbk编码,但是你却以gbk编码去解码 
    比如,字符串本身是utf-8的,但是你却用gbk去解码utf-8的字符串,所以结果不用说,则必然出

    解决办法:

    如果你确定当前字符串,比如抓取网页通过charset=utf-8,已经确定html的字符串是utf-8的,

    则可以直接去通过utf-8去解码。

     
  • 相关阅读:
    刷题篇--热题HOT 71-80
    刷题篇--热题HOT 61-70
    双飞翼布局介绍-始于淘宝UED
    css布局——百度前端技术学院
    CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
    CSS之BFC详解
    深入理解BFC和Margin Collapse
    CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
    3列、2列自适应布局,中部内容优先显示3列布局等方法
    三列布局,中间自适应
  • 原文地址:https://www.cnblogs.com/thouger/p/5070653.html
Copyright © 2011-2022 走看看