我在切分一个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字符的情况下切片有什么建议吗?
发布于 2014-04-11 14:19:02
丢弃从片的开头开始比特10的字节,直到你找到一个不是这样的字节,这个字节将开始一个新字符。你最多只能跳过3个字节。
或者,您也可以对Unicode字符串进行切片,这样就不会产生损坏的字符。
请注意,\ufeff是一个有效字符:它是宽度为零的不间断空格,一些损坏的文本编辑器会将它插入到UTF8文件的开头以标识它们。如果您想跳过它,请使用utf-8-sig编码。
https://stackoverflow.com/questions/23004797
复制相似问题