簡體   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