例如我有一个字符串,我希望找到一种简单的方法来获得子字符串,其编码为utf-8,子字符串的报告长度为<= N,当然我可以尝试N/3子字符串并增加N/3+1, N/3+2,…,但是否有简单的方法?
word = u"this is a ship, and some other words".encode("utf-8")
#some way got a substring
substring = func(word, N)
#assert len(repr(substring)) <= N
谢谢!
一种可能的方法:
- 取整个字符串的第一个N-1字节。
- 检查最后3个字节,看看你是否打破了转义序列,并在必要时切断字节
- 添加引号,记住它可能是
'
或"
。 - 将报告计算回utf-8。
- 检查最后几个字节,看看是否在Unicode码点的中间打断了字符串,并在必要时剪掉字节。可以通过检查位模式来区分前导字节和延续字节。