繁体   English   中英

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

[英]How to effectively slice an utf-8 encoded file

我在切片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'

唯一准确的结果是直接打印切片的部分,但是我的程序使用切片的部分而不是打印,并且由于开始时的偏移,大多数情况下切片的部分是不准确的。

理想输出

凯瑟琳(Katharine)睁开嘴唇,深吸一口气,好像在平时一样回复

关于如何在开始时没有BOM字符的情况下进行切片的任何建议?

从分片的开头丢弃以第10位开始的字节,直到找到一个没有的字节为止。 那将开始一个新角色。 您最多必须跳过3个字节。

或者,您可以切片Unicode字符串,这样不会给您断字符。

请注意,\\ ufeff是一个有效字符:这是零宽度的不间断空格,某些不完整的文本编辑器会在UTF8文件的开头插入这些空格以进行识别。 如果要跳过它,请使用utf-8-sig编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM