zoukankan      html  css  js  c++  java
  • 3、Python字符编码区分utf-8和utf-8-sig

    Python 读取文件首行多了"ufeff"字符串

    python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错:

    Traceback (most recent call last):
    A
      File "E:/python project/multiProcess/test.py", line 32, in <module>
      with open("%s.txt" % line, 'r', encoding='utf-8') as f1:
    FileNotFoundError: [Errno 2] No such file or directory: 'ufeffA.txt'

      

    要打开的路径比预期A.txt多了一串字符"ufeff", 显然无法正确打开文件.

    解决方案:

    在读取B.txt 时,指定编码方式为 "utf-8-sig"即可 如下:

    with open("B.txt", 'r', encoding='utf-8-sig') as f:
        line = f.readline()[0:-1]  #去掉末尾换行符
        print(line)
        with open("%s.txt" % line, 'r', encoding='utf-8') as f1:
            print(f1.readline())
        f1.close()
    f.close()

    首行出现的”ufeff“叫BOM("ByteOrder Mark")用来声明该文件的编码信息.

    ”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误.

    "uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8", 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.

    • 摘要:问题描述:json.loads(text,encoding='utf8')报UnexpectedUTF-8BOM(decodeusingutf-8-sig)错误,将encoding改为'utf-8-sig'仍然报错。原因分析:text包含BOM字符解决方案:将BOM头去掉

    • 问题描述:

      json.loads(text,encoding='utf8') 报Unexpected UTF-8 BOM (decode using utf-8-sig)错误,将encoding改为'utf-8-sig'仍然报错。

      原因分析:

      text包含BOM字符

      解决方案:

      将BOM头去掉,代码如下:

     if text.startswith(u'/ufeff'):
        text = text.encode('utf8')[3:].decode('utf8')

    原文:https://blog.csdn.net/wozaizhe56/article/details/82048645
    一个初识C++的小白
  • 相关阅读:
    python中字典dict pop方法
    Markdown 学习资源
    Windows bat 设置代理
    Warning: Permanently added '...' (RSA) to the list of known hosts --Windows下git bash 警告处理
    subilme增加对markdown的高亮支持
    ubuntu笔记1
    Sublime Python 插件配置合集
    Excel VBA 快捷键 代码
    贩卖守望先锋账号
    如何用VS2017用C++语言写Hello world 程序?
  • 原文地址:https://www.cnblogs.com/Real-m/p/13607694.html
Copyright © 2011-2022 走看看