在字节数上正确分割unicode字符串

时间:2014-05-01 17:43:20

标签: python unicode utf-8

我想将unicode字符串拆分为最多255个字节的字符,并将结果返回为unicode:

# s = arbitrary-length-unicode-string
s.encode('utf-8')[:255].decode('utf-8')

这个片段的问题是,如果第255个字节字符是2字节unicode字符的一部分,我将收到错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 254: unexpected end of data

即使我处理错误,我也会在字符串结尾处收到不必要的垃圾。

如何更优雅地解决这个问题?

1 个答案:

答案 0 :(得分:1)

UTF-8的一个非常好的属性是可以很容易地将尾随字节与起始字节区分开来。只需向后工作,直到您删除了一个起始字节。

trunc_s = s.encode('utf-8')[:256]
if len(trunc_s) > 255:
    final = -1
    while ord(trunc_s[final]) & 0xc0 == 0x80:
        final -= 1
    trunc_s = trunc_s[:final]
trunc_s = trunc_s.decode('utf-8')

编辑:查看标识为重复的问题中的答案。