我在切片utf-8编码文件时遇到问题。使用编解码器打开后,由于开头的字节顺序标记(BOM)字符导致移位,切片部分变得很困难。
请参阅下面我的尝试详情。
def readfiles(filepaf):
with codecs.open(filepaf,'r', 'utf-8') as f:
g=f.read()
q=' '.join(g.split())
return q
q=readfiles(c:xxx)
q=Katharine opened her lips and drew in her breath, as if to reply with equal vigor, when the shutting of a door...
>>> q[0:100]
u'\ufeffKatharine opened her lips and drew in her breath, as if to reply with equal vigor, when the shuttin'
>>> q[0:100].encode('utf-8')
'\xef\xbb\xbfKatharine opened her lips and drew in her breath, as if to reply with equal vigor, when the shuttin'
唯一准确的结果来自直接打印切片部分,但我的程序使用切片部分而不是打印,并且通常切片部分由于开始时的移位而不准确。
理想输出
凯瑟琳张开嘴唇,屏住呼吸,仿佛以同样的精力回应,当他们闭嘴时
关于如何在开头没有BOM字符进行切片的任何建议?
答案 0 :(得分:1)
丢弃从切片开头的第10位开始的字节,直到找到不包含的字节为止。那一个会开始一个新角色。你必须跳过最多3个字节。
或者,您可以对Unicode字符串进行切片,但不会为您提供损坏的字符。
请注意\ ufeff是一个有效字符:它是零宽度不间断空格,一些损坏的文本编辑器插入到UTF8文件的开头以识别它们。如果您想跳过它,请使用utf-8-sig编码。