Python UTF-8 编码问题(UnicodeDecodeError: 'gbk' codec can't decode byte)

    xiaoxiao2025-03-13  70

    解决办法:

    f=open(file_new,'r') #编码格式UTF8 f=open(file_new,'r', encoding='utf-8') #编码格式UTF8-BOM f=open(file_new,'r', encoding='utf-8-sig')

     

    若输出结果包含“\ufeff”,修改编码格式为“utf-8-sig”

    utf-8与utf-8-sig两种编码格式的区别:

    As UTF-8 is an 8-bit encoding no BOM is required and anyU+FEFF character in the decoded Unicode string (even if it’s the firstcharacter) is treated as a ZERO WIDTH NO-BREAK SPACE.

    UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM。

    BOM的来历

    为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。这作为一个“特征符”或“字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序。

    Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。

    “\ufeff”

    最新回复(0)