zoukankan      html  css  js  c++  java
  • 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单独处理,与文本内容隔离开,也是我们期望的结果.

    原文:https://blog.csdn.net/wozaizhe56/article/details/82048645

    • 摘要:问题描述: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://www.jianshu.com/p/f94b3fc04f5b

  • 相关阅读:
    asp.net如何实现删除文件的操作? (转)
    开始计算机英语的学习,先把这里当生词本用了。
    CSS Box Model 盒子模型
    生成网站快捷方式
    Microsoft .NET Framework 3.5 sp1离线安装解决方案
    asp.net生成网站快捷方式
    https://mail.google.com/tasks/ig?pli=1
    Sql server DATEDIFF DATEADD
    局域网 跨数据库 访问数据库
    asp.net 生成网站快捷方式
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/10536081.html
Copyright © 2011-2022 走看看