如果我使用数字或特殊字符,文本到二进制转换器将不起作用
Text to binary converter doesn't work if I use numbers or special characters
当输入中有 space 或特殊字符时,将字符串格式化为二进制数时出现问题。
phrase = "a b"
bin_str = '0'+'0'.join(format(ord(i), 'b') for i in phrase)
print(bin_str)
original_string = int('0b'+bin_str,2).to_bytes((int('0b'+bin_str,2).bit_length() + 7) // 8, 'big').decode()
print(original_string)
我应该得到:
011000010010000001100010
但是我得到了:
01100001010000001100010
当我尝试解码时,在第 4 行收到错误消息:
"utf-8' codec can't decode byte 0xa0 in position 1: invalid start byte"
如果变量词组是"año"
我应该得到:
01100001110000111011000101101111
但是我得到了:
0110000101111000101101111
当我尝试解码时,在第 4 行收到错误消息:
"utf-8' codec can't decode byte 0xc2 in position 0: invalid continuation byte"
我知道编解码器错误是因为二进制数错误,但我不知道为什么当我使用 space、特殊字符甚至数字时转换器工作错误,如果ord() 方法使用 Unicode。
我更改了这个:bin_str = '0'+'0'.join(format(ord(i), 'b') for i in phrase)
至:bin_str = '0'+bin(int.from_bytes(phrase.encode(), 'big'))[2:].zfill(8)
现在完美了!
PD:我仍然不知道为什么第一行不工作的原因
当输入中有 space 或特殊字符时,将字符串格式化为二进制数时出现问题。
phrase = "a b"
bin_str = '0'+'0'.join(format(ord(i), 'b') for i in phrase)
print(bin_str)
original_string = int('0b'+bin_str,2).to_bytes((int('0b'+bin_str,2).bit_length() + 7) // 8, 'big').decode()
print(original_string)
我应该得到:
011000010010000001100010
但是我得到了:
01100001010000001100010
当我尝试解码时,在第 4 行收到错误消息:
"utf-8' codec can't decode byte 0xa0 in position 1: invalid start byte"
如果变量词组是"año"
我应该得到:
01100001110000111011000101101111
但是我得到了:
0110000101111000101101111
当我尝试解码时,在第 4 行收到错误消息:
"utf-8' codec can't decode byte 0xc2 in position 0: invalid continuation byte"
我知道编解码器错误是因为二进制数错误,但我不知道为什么当我使用 space、特殊字符甚至数字时转换器工作错误,如果ord() 方法使用 Unicode。
我更改了这个:bin_str = '0'+'0'.join(format(ord(i), 'b') for i in phrase)
至:bin_str = '0'+bin(int.from_bytes(phrase.encode(), 'big'))[2:].zfill(8)
现在完美了!
PD:我仍然不知道为什么第一行不工作的原因