gpt4 book ai didi

python - 定长数据域和变长utf-8编码

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:44 25 4
gpt4 key购买 nike

我有一个 Python 项目,其中我在包含 utf-8 的通信协议(protocol)中有一个固定的字节长度文本字段(NOT FIXED CHAR-LENGTH FIELD)编码、NULL 填充、NULL 终止的字符串。

我需要确保字符串适合固定字节长度字段。由于 utf-8 是一种可变宽度编码,这使得使用蛮力以固定字节长度截断字符串变得很冒险,因为您可能会在末尾留下悬空的多字节字符的一部分。

是否有模块/方法/函数/等可以帮助我将 utf-8 可变宽度编码字符串截断为固定字节长度?

做 Null 填充和终止的东西将是一个奖励。

这看起来像是一个已经被破解的坚果。我不想重新发明已经存在的东西。

最佳答案

让 Python 检测并消除任何部分或无效字符。

byte_str = uni_str.encode('utf-8')
byte_str = byte_str[:size].decode('utf-8', 'ignore').encode('utf-8')

之所以可行,是因为 UTF-8 规范对字符的第一个字节中的后续字节数进行了编码,因此可以轻松检测到丢失的字节。

编辑:这是这段代码使用我从另一个问题中提取的随机东方字符串的结果。第一个数字是最大大小,第二个是 UTF-8 字符串中的实际字节数。

45 45 具有靜電產生裝置之影像輸入裝置
44 42 具有靜電產生裝置之影像輸入裝
43 42 具有靜電產生裝置之影像輸入裝
42 42 具有靜電產生裝置之影像輸入裝
41 39 具有靜電產生裝置之影像輸入
40 39 具有靜電產生裝置之影像輸入
39 39 具有靜電產生裝置之影像輸入
38 36 具有靜電產生裝置之影像輸
37 36 具有靜電產生裝置之影像輸
36 36 具有靜電產生裝置之影像輸
35 33 具有靜電產生裝置之影像
34 33 具有靜電產生裝置之影像
33 33 具有靜電產生裝置之影像
32 30 具有靜電產生裝置之影
31 30 具有靜電產生裝置之影

关于python - 定长数据域和变长utf-8编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com