首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地对utf-8编码文件进行切片

如何有效地对utf-8编码文件进行切片
EN

Stack Overflow用户
提问于 2014-04-11 14:12:33
回答 1查看 241关注 0票数 1

我在切分一个utf-8编码文件时遇到了问题。使用编解码器打开后,由于开头的字节顺序标记(BOM)字符会导致偏移,因此对部分进行切片会变得困难。

请参阅下面我的尝试的详细信息。

代码语言:javascript
复制
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字符的情况下切片有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 14:19:02

丢弃从片的开头开始比特10的字节,直到你找到一个不是这样的字节,这个字节将开始一个新字符。你最多只能跳过3个字节。

或者,您也可以对Unicode字符串进行切片,这样就不会产生损坏的字符。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23004797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档