我需要修剪一个多字节字符串,以便剩余的字符在其原始编码中仍然可读(没有尾随字节标记)。
示例 - 以下字符串长度为 105 个字符。但是它有 194 个字节长。将此字符串导入字符限制为 150 的 redshift 数据库列时,出现溢出错误。
>>str="Негосударственное образовательное учреждение высшего профессионального образования Институт Уник-70264832"
>>> len(str)
105
>>> len(bytes(str, 'utf-8'))
194
如何安全地将字符串修剪为整个多字节字符,以便最终得到可能在 150 字节以下的最长的整个字符串?
我知道以下适用于 Python 2,但我需要适用于 Python 3 的解决方案。
def slice_multibyte(string, length):
#Loop while string is still longer than required length
while len(str(string.decode('utf-8'))) > length:
#Trim off one full utf-8 character (may be multibyte)
string = string.decode("utf-8")[:len(string.decode("utf-8"))-1].encode("utf-8")
return string