zoukankan      html  css  js  c++  java
  • python 处理中文网页时,忽略特殊字符,忽略异常

    http://hi.baidu.com/wen122056/blog/item/c92ecba97ea1c8ee1f17a262.html

    中文网页大部分是gb2312编码的,在用python 处理时候最好转换成unicode的,怎么转换呢?

    比如:

              html = open('http://www.baidu.com')

              这时html是字节流,咱应该转换成字符流,转换成unicode编码:

              html = html.decode('gb2312')

              html = html.decode('gb18030')

              这两个编码,最好用gb18030或者gbk,因为这两编码位数足够大,有时候这么转换了还会报错:'gb18030' codec can't decode bytes in position 10332-10333: illegal multibyte sequence

              这是应为在转编码的时候decode碰见了特殊字符,转换不了——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比 如\xa3\xa0,或者\xa4\x57,这 些字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。

              那怎么解决呢?可以这样 html = html.decode('gb18030', 'ignore')在转编码时忽略错误

              特别注意:

                      在处理中文网页时候,当你用decode、encode时候,最好都加上'ignore'忽略特殊字符

    s.decode('gbk', ‘ignore').encode('utf-8′) 
    因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常; 
    如果设置为ignore,则会忽略非法字符; 
    如果设置为replace,则会用?取代非法字符; 
    如果设置为xmlcharrefreplace,则使用XML的字符引用。

  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/lvxiuquan/p/2626707.html
Copyright © 2011-2022 走看看