zoukankan      html  css  js  c++  java
  • Python+request+unittest学习(一)- 读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法

    现象

    读取文本时经常会出现锘*系列错误。
    例1:锘縣,其实开头的文本是h,http被显示为锘縣ttp
    例2:锘缝,其实开头的文本是p,public被显示为锘缝ulic
    只要文本的首字母为锘的都属于这类错误,在Python、Java、PHP等等使用过程中都会遇到,这类错误与语言无关,错误的原因是UTF-8的BOM。
    原因

    BOM即Byte Order Mark,是UTF-8文档的Unicode签名,即EF BB BF这三个字节,当把文件编码选为UTF-8时,系统会自动在文件头部添加上EF BB BF这三个字节,而选为UTF-8 NO BOM时会自动去掉这三个字节。
    BOM是可选的,可以用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。
    微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的,然而这个只是微软暗自作的标记,其它平台上并没有对UTF-8文本文件做个这样的标记。
    解决办法

    1.尽量使用notepad++,sublime,editplus等不直接加BOM的文本编辑器
    2.使用ultraedit等二进制编辑器去除BOM
    3.使用1中的编辑器重新打开文档并重新保存为以UTF-8无BOM格式编码。
    4.将编码设置为ASCII,当然这也很多中文就麻烦了
    5.用Python去除BOM

    import codecs
    
    data = open("Test.txt").read()
    if data[:3] == codecs.BOM_UTF8:
         data = data[3:]
    print data.decode("utf-8")
    

      


    原文链接:https://blog.csdn.net/mighty13/java/article/details/78077867

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12676366.html
Copyright © 2011-2022 走看看