如何从随机二进制字符串中删除换行符



我制作了一个Python脚本来生成随机二进制字符串,然后将其转换为ASCII。

from random import *
def decode(binary):
# credit to mhawke from stack overflow
return ''.join(chr(int(binary[i*8:i*8+8],2)) for i in range(len(binary)//8))

def generate_random_binary(chars=None):
if not chars:
chars = randint(10, 20)
r = ''
for i in range(chars * 5):
num = choice(['0', '1'])
r = r + num
return r
generated = generate_random_binary(64)
decoded = decode(generated)
decoded = eval("r'''"+decoded.replace('', '')+"'''")
print(decoded.replace('n', ''))

有时我会得到带有换行符的输出,即使我试图删除这些换行符。我有什么东西不见了吗?

以下是我的输出示例(在Repl.it中运行(:

ìîù_½   Ý05!d­(óÞÉ|½b°L³µ¬
H}N¸'Ä

我认为是LF和CR。n只代替LF。

请参阅此处http://www.asciitable.com/

我认为最好将不可打印的字符替换为'.'或空格"。

from random import *
import unicodedata
printable = {'Lu', 'Ll'}
def replace_nonprintable_with_period(str):
return ''.join(c  if unicodedata.category(c) in printable else '.' 
for c in str)
#credit to https://stackoverflow.com/a/93557/4983398
def decode(binary):
# credit to mhawke from stack overflow
return ''.join(chr(int(binary[i * 8:i * 8 + 8], 2)) for i in range(len(binary) // 8))

def generate_random_binary(chars=None):
if not chars:
chars = randint(10, 20)
r = ''
for i in range(chars * 5):
num = choice(['0', '1'])
r = r + num
return r

generated = generate_random_binary(64)
decoded = decode(generated)
decoded = eval("r'''" + decoded.replace('', '') + "'''")
print(replace_nonprintable_with_period(decoded))

样本输出:

.Ä.Ô..WE..nuO.Ä...çò.Á.......Àã..c...Ñ..

unicode.category是unicode和Python的一个非常有用的特性。有关更多详细信息,请参阅本文。

最新更新