String Python 3:修剪多字节字符串

String Python 3:修剪多字节字符串,string,python-3.x,trim,multibyte,String,Python 3.x,Trim,Multibyte,我需要修剪一个多字节字符串,以便剩余的字符在其原始编码中仍然可读(没有尾随字节标记) 示例-以下字符串长度为105个字符。但是它有194字节长。当将此字符串导入到字符限制为150的红移数据库列时,我得到一个溢出错误 >>str="Негосударственное образовательное учреждение высшего профессионального образования Институт Уник-70264832" >>> len(str)

我需要修剪一个多字节字符串,以便剩余的字符在其原始编码中仍然可读(没有尾随字节标记)

示例-以下字符串长度为105个字符。但是它有194字节长。当将此字符串导入到字符限制为150的红移数据库列时,我得到一个溢出错误

>>str="Негосударственное образовательное учреждение высшего профессионального образования Институт Уник-70264832"
>>> len(str)
105
>>> len(bytes(str, 'utf-8'))
194
如何安全地将字符串缩减为整个多字节字符,从而使整个字符串的长度不超过150字节

我知道以下内容适用于Python2,但我需要Python3的解决方案

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

经过进一步思考,我提出了以下解决方案:

def trim_multibyte(string, length):
    while len(bytes(string, 'utf-8')) > length:
        string=string[:-1]
    return string

我的方法是,只要字符串的字节版本长度超过指定的限制,就从字符串的末尾刮去一个字符。

这似乎不适用于某些编码,如阿拉伯语或表情符号。我愿意接受其他建议!