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++的小白
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    关于if和else和switch case的用法和程序编码操作过程
    关于java的特点
    关于JAVA的数据类型
    关于java的学习
    力扣482. 密钥字符串 S python--每天一题
  • 原文地址:https://www.cnblogs.com/Real-m/p/13607694.html
Copyright © 2011-2022 走看看