u'\ufeff' in Python string 在Python字符串中的u'\ufeff'

7 浏览
0 Comments

u'\ufeff' in Python string 在Python字符串中的u'\ufeff'

我遇到了以下异常消息的错误:

UnicodeEncodeError: 'ascii'编解码器无法对字符u'\ufeff'进行编码,位于位置155:超出范围(128)

不确定u'\ufeff'是什么,它在我进行网页抓取时出现。我该如何解决这个问题?.replace()字符串方法对它无效。

0
0 Comments

在Python字符串中出现(u'\ufeff' in Python string)问题的原因是该字符是BOM(字节顺序标记)或“字节顺序标识”。它通常作为文件的前几个字节接收到,告诉你如何解析其余数据的编码。你可以简单地移除该字符以继续操作。然而,由于错误提示说你试图转换为'ascii'编码,你应该选择另一种编码来完成你想要做的操作。

解决方法是使用Linux命令'dos2unix'来将BOM和行结束符转换为Unix/Linux所期望的格式。

0
0 Comments

在Python中遇到这个问题是因为Python 3支持在打开文件时使用encoding关键字来自动处理编码。如果没有指定encoding,则BOM会包含在读取的结果中。通过指定正确的编码,结果中的BOM会被省略。

解决方法是在打开文件时使用encoding参数,并设置为'utf-8-sig'。

以下是在Python 3中的示例代码:

f = open('file', mode='r', encoding='utf-8-sig')
f.read()

这样就可以正确地读取文件内容,而不会出现BOM。

此外,一些用户在处理保存自Excel的CSV文件时也遇到了类似的问题。这是因为Excel生成的CSV文件中可能包含BOM。

希望这个解决方法对你有帮助!

0
0 Comments

在Python字符串中出现(u'\ufeff')的原因是Unicode字符U+FEFF是字节顺序标记(BOM),用于区分大端和小端的UTF-16编码。如果你使用正确的编解码器对网页进行解码,Python会自动删除它。下面是一些示例:

#!python2
#coding: utf8
u = u'ABC'
e8 = u.encode('utf-8')        # 不带BOM的编码
e8s = u.encode('utf-8-sig')   # 带BOM的编码
e16 = u.encode('utf-16')      # 带BOM的编码
e16le = u.encode('utf-16le')  # 不带BOM的编码
e16be = u.encode('utf-16be')  # 不带BOM的编码
print 'utf-8     %r' % e8
print 'utf-8-sig %r' % e8s
print 'utf-16    %r' % e16
print 'utf-16le  %r' % e16le
print 'utf-16be  %r' % e16be
print
print 'utf-8  w/ BOM decoded with utf-8     %r' % e8s.decode('utf-8')
print 'utf-8  w/ BOM decoded with utf-8-sig %r' % e8s.decode('utf-8-sig')
print 'utf-16 w/ BOM decoded with utf-16    %r' % e16.decode('utf-16')
print 'utf-16 w/ BOM decoded with utf-16le  %r' % e16.decode('utf-16le')

注意,EF BB BF是UTF-8编码的BOM。这在UTF-8中并不是必需的,而只是作为一个签名(通常在Windows系统中使用)。

输出结果如下:

utf-8     'ABC'
utf-8-sig '\xef\xbb\xbfABC'
utf-16    '\xff\xfeA\x00B\x00C\x00'    # 添加BOM并使用本机处理器的字节顺序编码
utf-16le  'A\x00B\x00C\x00'
utf-16be  '\x00A\x00B\x00C'
utf-8  w/ BOM decoded with utf-8     u'\ufeffABC'    # 如果存在BOM,则不会删除BOM
utf-8  w/ BOM decoded with utf-8-sig u'ABC'          # 如果存在BOM,则会删除BOM
utf-16 w/ BOM decoded with utf-16    u'ABC'          # 必须存在BOM
utf-16 w/ BOM decoded with utf-16le  u'\ufeffABC'    # 如果存在BOM,则不会删除BOM

需要注意的是,utf-16编解码器要求必须存在BOM,否则Python无法确定数据是大端还是小端。

参考链接:[unicode.org/faq/utf_bom.html#bom6](https://www.unicode.org/faq/utf_bom.html#bom6)

0