Python 3:修剪多字节字符串

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (99)

我需要修剪多字节字符串,以便其余字符仍然可以原始编码读取(没有尾随字节标记)。

示例 - 以下字符串长度为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
提问于
用户回答回答于

在进一步思考之后,我提出了这个解决方案:

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

我的方法是只要字符串的字节版本长度超过指定的限制,就可以在字符串末尾删除一个字符。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励