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去解码。

     
  • 相关阅读:
    Windows共享作为公司文件服务器的案例
    关于限制域用户登陆计算机的几点总结
    防止加入域主机脱离域的控制(管理员权限)
    域组策略禁止执行指定软件
    域用户执行金蝶K/3报错解决方法
    WinXP/Win7/Win8本地用户配置文件迁移至域用户
    Windows批处理:请求远程协助
    浅谈JavaScript闭包
    新蛋那几月
    JavaScript 32位整型无符号操作
  • 原文地址:https://www.cnblogs.com/thouger/p/5070653.html
Copyright © 2011-2022 走看看