如何有效地切片utf-8编码文件

时间:2014-04-11 06:12:33

标签: python encoding utf-8

我在切片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字符进行切片的任何建议?

1 个答案:

答案 0 :(得分:1)

丢弃从切片开头的第10位开始的字节,直到找到不包含的字节为止。那一个会开始一个新角色。你必须跳过最多3个字节。

或者,您可以对Unicode字符串进行切片,但不会为您提供损坏的字符。

请注意\ ufeff是一个有效字符:它是零宽度不间断空格,一些损坏的文本编辑器插入到UTF8文件的开头以识别它们。如果您想跳过它,请使用utf-8-sig编码。