1

今天,我正在学习内置函数chr。并且通过 ascii-table 搜索,我发现\x08意味着退格。所以我玩了一下。但结果让我很困惑:

In [52]: print '1\x08'
1

In [53]: print '1\x082'
2

似乎只有跟随另一个字符,\x08才会像退格一样,为什么会发生这种情况?\x08在字符串中表现如何?

4

3 回答 3

3

在这两种情况下,它的行为都像退格键,也就是说它将光标向后移动一个空格。但是,它不会删除那里的内容,除非您编写其他内容。所以在第一种情况下,1 仍然存在,但在第二种情况下,它被 2 覆盖。

于 2015-12-11T07:10:18.367 回答
1

1---- backspace只需将光标左移一个空格,如果您使用作品或其他编辑器,它也会删除左一个字符。你必须知道的是,它也是一个与orbackspace相同的字符。1a

2----终端作为我们默认的输出设备,你也可以把他当成文件。

所以如果你使用

  print '1\x08'

这意味着您在文件 stdout 中写入 a1和 a 。backspace

如果你读取文件,系统读取1 + breakspace,你会得到一个1.

如果你使用

  print '1\x082'

这意味着您在文件 stdout 中写入 a 1、 abackspace和 a 。2

如果你读取文件,系统会得到1 + breakspace + 2,当你打印它们时,你只会得到一个2,因为它1在你使用退格时覆盖了第一个。

有关详细信息,您可以查看下一个测试代码

  if __name__ == "__main__":
      print "1\x08"
      print "1\x082"

      f = open("1.txt", "w")
      f.write("1\x08\x082")
      f.close();

      f = open("1.txt", "r")
      str = f.readlines( )
      print len(str), str
      for s in str:
      print "s=|" + s + "|"

在此处输入图像描述

你可以看到字符串s=|1\x08\x082|显示s=2|。因为两次|1时不显示。backspace

于 2015-12-11T08:15:44.110 回答
1

Backspace 仅将光标移动一个字符,实际上并没有删除它。例如,这会导致 193:

print('123\x08\x089')

您可以使用空格来实际“删除”角色......

于 2015-12-11T07:10:54.203 回答