def split_utf8(s, n):
    assert n >= 4
start = 0
lens = len(s)
while start < lens:
    if lens - start <= n:
        yield s[start:]
return
end = start + n
while '\x80' <= s[end] <= '\xbf':
    end -= 1
assert end > start
yield s[start:end]
start = end
Разделить строку Юникода на фрагменты по 300 байт без уничтожения символов