如果我使用数字或特殊字符,文本到二进制转换器不起作用
Posted
技术标签:
【中文标题】如果我使用数字或特殊字符,文本到二进制转换器不起作用【英文标题】:Text to binary converter doesn't work if I use numbers or special characters 【发布时间】:2020-03-13 08:40:28 【问题描述】:当输入中有空格或特殊字符时,将字符串格式化为二进制数时出现问题。
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'编解码器无法解码位置1的字节0xa0:无效的起始字节”
如果变量短语是“año” 我应该得到: 01100001110000111011000101101111 但是我得到了: 0110000101111000101101111 当我尝试解码时,在第 4 行收到错误消息:
“utf-8'编解码器无法解码位置0的字节0xc2:无效的继续字节”
我知道发生编解码器错误是因为二进制数错误,但我不知道为什么当我使用空格、特殊字符甚至数字时转换器工作错误,如果 ord() 方法使用 Unicode .
【问题讨论】:
【参考方案1】:我改变了这个: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:我仍然不知道为什么第一行不起作用的原因
【讨论】:
第一个版本假定每个字符的ord
的位长为7。这不适用于' '
(6) 或'ñ'
(8)。此外,它假设每个字符都可以在 UTF-8 中编码为单个字节:'ñ'
并非如此。以上是关于如果我使用数字或特殊字符,文本到二进制转换器不起作用的主要内容,如果未能解决你的问题,请参考以下文章