run*_*alk 9 python string utf-8
我想拆分u"an arbitrary unicode string"成300字节的块而不破坏任何字符.字符串将写入一个期望utf8使用的套接字unicode_string.encode("utf8").我不想破坏任何角色.我该怎么做?
Die*_*Epp 10
UTF-8就是为此而设计的.
def split_utf8(s, n):
"""Split UTF-8 s into chunks of maximum length n."""
while len(s) > n:
k = n
while (ord(s[k]) & 0xc0) == 0x80:
k -= 1
yield s[:k]
s = s[k:]
yield s
Run Code Online (Sandbox Code Playgroud)
没有测试过.但是你找到了一个分裂的地方,然后回溯到你到达角色的开头.
但是,如果用户可能希望查看单个块,则可能需要拆分字形集群边界.这要复杂得多,但并不棘手.例如,"é"你可能不希望拆分"e"和"´".或者你可能不在乎,只要他们最终再次陷入困境.
UTF-8有一个特殊属性,所有连续字符都是0x80- 0xBF(从第10位开始).所以只要确保你没有在一个之前拆分.
有点像:
def split_utf8(s, n):
if len(s) <= n:
return s, None
while ord(s[n]) >= 0x80 and ord(s[n]) < 0xc0:
n -= 1
return s[0:n], s[n:]
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |