CP932 の最大バイト数を超えない長さで文字列を丸める
from itertools import accumulate
def cp932_substr(source, max_length):
"""CP932での最大バイト数(max_length) を超えない文字数で丸める"""
if not source:
return ""
data = map(lambda i: len(i.encode("cp932")), source)
target = filter(lambda i: i <= max_length, accumulate(data))
count = len(list(target))
return source[:count]