Python中的二进制到字符串/文本

2024-09-28 21:53:41 发布

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

我已经在网上搜索了很多次,但还没有找到转换二进制字符串变量的方法,X

X = "1000100100010110001101000001101010110011001010100"

变成一个UTF-8字符串值。

我发现有些人正在使用诸如

b'message'.decode('utf-8')

但是,这个方法对我不起作用,因为“b”被认为是不存在的,我不知道如何用变量替换“消息”。不仅如此,我还无法理解这种方法是如何工作的。有更好的选择吗?

那么,如何将二进制字符串转换为文本字符串呢?

编辑:我也不介意ASCII解码

澄清:以下是我具体希望发生的事情。

def binaryToText(z):
    # Some code to convert binary to text
    return (something here);
X="0110100001101001"
print binaryToText(X)

这样就可以产生字符串。。。

hi

Tags: to方法字符串文本消息编辑messageascii
3条回答

看起来您正在尝试从每个字符的二进制字符串表示(位字符串)中解码ASCII字符。

您可以取八个字符(一个字节)的每个块,将其转换为整数,然后使用chr()将其转换为字符:

>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i

假设字符串中编码的值是ASCII,这将为您提供字符。你可以这样概括:

def decode_binary_string(s):
    return ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))

>>> decode_binary_string(X)
hi

如果你想保持原来的编码,你不需要再解码了。通常您会将传入的字符串转换为Pythonunicode字符串,可以这样做(Python 2):

def decode_binary_string(s, encoding='UTF-8'):
    byte_string = ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
    return byte_string.decode(encoding)

提供要转换的int的可选基参数:

>> x = "1000100100010110001101000001101010110011001010100"
>> int(x, 2)
301456912901716

在Python 2中,ascii编码(字节)字符串也是utf8编码(字节)字符串。 在Python 3中,(unicode)字符串必须编码到utf8编码字节。解码的例子走错了路。

>>> X = "1000100100010110001101000001101010110011001010100"
>>> X.encode()
b'1000100100010110001101000001101010110011001010100'

仅包含数字“0”和“1”的字符串是一种特殊情况,适用相同的规则。

相关问题 更多 >