Python 将UTF-8字符串安装到bytellength 32

Python 将UTF-8字符串安装到bytellength 32,python,string,utf-8,bytearray,Python,String,Utf 8,Bytearray,我有一个字符串str,它可能由UTF-8字符组成。我想将它写入一个精确长度为N字节的文件(可能包含填充)。因此,如果str大于这N个字节,则应将其截断,使其小于N个字节,然后用\0字节填充到N个字节。python中有什么好的/快速的方法可以做到这一点吗?您只需小心,不要在多字节序列中间切断字节流。这似乎有效: def fixlen (s, length): bs = s.encode ('utf-8') bs = bs [:length] while True:

我有一个字符串
str
,它可能由UTF-8字符组成。我想将它写入一个精确长度为N字节的文件(可能包含填充)。因此,如果
str
大于这N个字节,则应将其截断,使其小于N个字节,然后用
\0
字节填充到N个字节。python中有什么好的/快速的方法可以做到这一点吗?

您只需小心,不要在多字节序列中间切断字节流。这似乎有效:

def fixlen (s, length):
    bs = s.encode ('utf-8')
    bs = bs [:length]
    while True:
        try:
            bs.decode ('utf-8')
            break
        except UnicodeDecodeError:
            bs = bs [:-1]
    return bs + b'\0' * (length - len (bs) )


s = 'LLegó cigüeña'
for length in range (0, 20):
    bs = fixlen (s, length)
    print (s, bs, bs.decode ('utf-8') )

预先初始化
bytearray(length)
并将安装好的字符串放入其中不是更快吗?(使用
arr[:len(bs)]=bs
)也因为我在某个地方读过它,使用大字符串
bs=bs[:-1]
可能是
bs[:]=bs[:-1]
,因为这不会复制数组,对吗?