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]
,因为这不会复制数组,对吗?