是否有一种 Pythonic 方法可以将 Unicode 字符串截断为最大字节数?
Is there a Pythonic way of truncating a Unicode string by a maximum number of bytes?
如果 API 接受一些有字节数限制的字符串值,但接受 Unicode,是否有更好的方法来缩短具有有效 Unicode 的字符串?
def truncate(string: str, length: int):
"""Shorten an Unicode string to a certain length of bytes."""
if len(string.encode()) <= length:
return string
chars = list(string)
while sum(len(char.encode()) for char in chars) > length:
chars.pop(-1)
return "".join(chars)
这应该适用于 Python-3:
bytes_ = string.encode()
try:
return bytes_[:length].decode()
except UnicodeDecodeError as err:
return bytes_[:err.start].decode()
基本上我们在第一次解码时截断error.UTF-8是前缀码。因此,解码器应该始终能够看到字符串何时在字符中间被截断。口音和其他东西可能会出现奇怪的情况。我还没有想过这个。也许我们也需要一些标准化。
在Python-2中,确保指定编码。
如果 API 接受一些有字节数限制的字符串值,但接受 Unicode,是否有更好的方法来缩短具有有效 Unicode 的字符串?
def truncate(string: str, length: int):
"""Shorten an Unicode string to a certain length of bytes."""
if len(string.encode()) <= length:
return string
chars = list(string)
while sum(len(char.encode()) for char in chars) > length:
chars.pop(-1)
return "".join(chars)
这应该适用于 Python-3:
bytes_ = string.encode()
try:
return bytes_[:length].decode()
except UnicodeDecodeError as err:
return bytes_[:err.start].decode()
基本上我们在第一次解码时截断error.UTF-8是前缀码。因此,解码器应该始终能够看到字符串何时在字符中间被截断。口音和其他东西可能会出现奇怪的情况。我还没有想过这个。也许我们也需要一些标准化。
在Python-2中,确保指定编码。