在Python中阅读带有特殊字符的字符串

kx1ctssn  于 2023-03-31  发布在  Python
关注(0)|答案(1)|浏览(117)

我有一个特殊字符串,如下所示

req_str = 'N\x08NA\x08AM\x08ME'
## If I print it I correctly get the word "NAME"
print(req_str)

>>> print(req_str)
NAME

现在我想从字符串中提取字符串NAME

''.join(c for c in 'N\x08NA\x08AM\x08ME' if c.isprintable())
## this produces
'NNAAMME'

我知道这与一些特殊的编码有关。我不是很熟悉字符串编码。我的问题是在这种情况下如何将单词'NAME'提取为字符串?

58wvjzkj

58wvjzkj1#

根据ASCII表,\x08用于退格字符。它也可以由\b生成:

req_str1 = "N\x08NA\x08AM\x08ME"
req_str2 = "N\bNA\bAM\bME"
print(req_str1)
print(req_str2)
print(req_str1 == req_str2)

输出:

NAME
NAME
True

基本上,它写入一个N,然后应用退格,然后写入另一个N。这就是为什么你在最终输出中看到一个NAME也是如此。
要提取NAME,您可以执行终端对它所做的操作:
(感谢@DarkKnight)

def extract(s):
    BS = "\x08"
    r = []
    for c in s:
        if c == BS:
            r = r[:-1]
        else:
            r.append(c)
    return ''.join(r)

req_str = 'N\x08NA\x08AM\x08ME'

s = extract(req_str)

print(len(req_str))
print(s)
print(len(s))

其他信息:如果您想知道这是什么根源:在过去,打印机/打字机使用这种技术将一个字符打两次,使其成为粗体。它被称为overstriking or overtyping

相关问题