python3中的固定长度编码

2024-10-02 10:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用python3编写一个加密/解密程序,它可以很好地处理字符串;但是,我在将它转换为使用字节字符串时遇到了一些问题,因为在UTF-8中,字符可以用1到4个字节的任何地方表示。在

>>>'\u0123'.encode('utf-8')
b'\xc4\xa3'
>>>'\uffff'.encode('utf-8')
b'\xef\xbf\xbf'

经过一番研究,我发现在python3中目前没有一种编码方式,它对每个字节都有固定的长度,并且所有字符都是UTF-8格式的——有没有什么模块/函数可以用来解决这个问题(比如附加空字节,以便每个charter都能对长度为4的字节串进行编码)?在


Tags: 字符串程序字节地方字符python3utfencode
1条回答
网友
1楼 · 发布于 2024-10-02 10:24:58

UTF-8是一种编码,它总是使用可变的字节数;字节数取决于输入文本的unicode码位。在

如果您需要能够处理Unicode的固定长度编码,请使用UTF-32(UTF-16仍然使用每个码位2或4个字节)。在

请注意,UTF-16和UTF-32编码都包含一个Byte Order Mark代码单元;一个初始的U+FEFF ZERO WIDTH NO-BREAK SPACE码位,它让解码器知道字节是以小端还是大端顺序产生的。对于UTF-32,这个代码点始终是4个字节,因此输出的长度将是4+(4*个字符计数)。在

通过将-le-be添加到编解码器中,可以按照特定的字节顺序进行编码,在这种情况下,BOM被省略:

>>> 'Hello world'.encode('utf-32')
b'\xff\xfe\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00'
>>> 'Hello world'.encode('utf-32-le')
b'H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00'
>>> 'Hello world'.encode('utf-32-be')
b'\x00\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d'

相关问题 更多 >

    热门问题