如果我使用数字或特殊字符,文本到二进制转换器不起作用

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 中编码为单个字节:'ñ' 并非如此。

以上是关于如果我使用数字或特殊字符,文本到二进制转换器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

字符编码介绍

字符编码

字符编码

字符编码

字符编码

验证文本框只允许数字,没有特殊字符或字母[重复]