需要帮助才能处理 Python 中超过 2 个或更多字节的字符

Need help to work with characters longer than 2 or more bytes in Python

我正在学习 python 中的位和字节,方法是编写一个将字符串转换为二进制并再次转换回字符串的小程序。暂时我只有一个转二进制的函数。

string = 'word'

for c in word:
    convertToBinary(c) #Function that converts to binary

输出:

01110111
01101111
01110010
01100100

现在我想编写一个 fromBinary() 将二进制转换为字符串的函数。但是我坚持如何处理超过 1 个字节的字符,例如 'å'.

string = 'å'

    for c in word:
        convertToCBinary(c)

输出:

    11000011
    10100101

当我有一个包含不同长度(以字节为单位)的字符的字符串时,这就成了一个问题。

string = 'åw'

    for c in word:
        convertToCBinary(c)

输出:

11000011    #first byte of 'å'
10100101    #second byte of 'å'
01110111    #w

我在想我可以将字节重新合并为一个,但是我真的很困惑如何确定要合并哪些字节。我怎样才能创建一个函数来识别哪些字节一起构成一个字符?

没那么难。当然有一个系统 - 否则没有程序可以打印或编辑像 ñáñez 这样的名字...

每个字节的高位表示该字节的状态:

1) 如果第 7 位为 0,则它只是 ASCII (*0*1110111 = w)

2) 如果您在顶部找到 11,则表示后面有更多字节(以及数量):

   *110*xxxxx *10*xxxxxx
   *1110*xxxx *10*xxxxxx *10*xxxxxx
   *11110*xxx *10*xxxxxx *10*xxxxxx *10*xxxxxx
   *111110*xx *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx
   *1111110*x *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx

11000011    #first byte of 'å'
10100101    #second byte of 'å'

因此:

*110* means 1 byte follows:
*110*00011 *10*100101

00011 + 100101 = 000 11100101 = the unicode value for å (0x00e5)

注意:我认为您的示例中的 w 有问题。