0X1A转义字符

前置知识

  • 0X16字符串处理

正文

  1. 有的字符在在字符集中有定义,但是我们很很难通过键盘直接输入。这分为两种情况:
    1. 没有直接对应的按键。例如中文字符在UTF-8中有编码,但是键盘上没有直接输入的按键。
    2. 字符在源码中有特殊语法含义。例如在单引号括起来的字符串中。如果出现另一个单引号,就可能把句中这个单引号认为是字符串的终结,从而引起语法错误。
  2. 对于上边提到的两种情况可以使用转义字符这一方案解决。
    • 注意,没有对应按键的情况,转义字符只是一种解决方案。还有其他的解决方案存在,例如对于输入中文,可以使用中文输入法通过按键组合输入字符。
  3. 转义字符的语法在解决问题先“加重”了问题。它新增了一个有语法意义的符号——转义符。在很多语言中,都选择反斜杠符号“\”转义符。每当出现这个字符,其后的一个或更多的字符会和它一起组成一个转义序列,这个序列用来表示一个不能用键盘输入的字符。
  4. 转义字符一个简单的应用就是。在字符串中出现引号。
    • 如果单引号为边界,则字符串中出现单引号需要转义,写为\'。(显示出来就是一个')
    • 如果双引号为边界,则字符串中出现双引号也需要转义,写为\"。(显示出来就是一个")
  5. 如果要在字符中出现反斜杠本身,需要转义它自己——用\表示一个反斜杠。(显示出来就是一个\)
    • \\表示两个反斜杠(显示\)。
  6. 一些常用的特殊符号有专用的转移字符:
    • \a bell
    • \b backspace
    • \f form feed
    • \n new line(LF) 出现这个符号的地方在输出的时候会换行。
    • \r carriage return(CR) 出现这个符号的地方在输出的时候会换行。
    • \t horizontal tab
    • \v vertical tab
    • 除了用\n或\r换行。还可以直接在\后接回车实现字符串字面值内有换行符。例如: >>str='This is \ >another line.' >
  7. 特殊转义符组合\z有特殊用途。它不往字面值中增加任何字符,反而会阻止其后空格成为字面值表示的字符串的一部分。其作用范围是从其后到第一个非空格。 >` >str='Hello\z My World' > str存储的实际内容是“HelloMy World”(不包括引号)。 另外“空白符”,一般指空格、换行、tab。
  8. 转义字符后也可接一个0到127的十进制整数(含0和127)。然后显示为对应十进制ASCII码的字符。也可以用等价的十六进制数,但是记得以x开头(与十六进制数字字面值不同)。例如: >>print('\33\x31\65\x42') > 输出结果为 >>!1AB > 注意如果用十进制数转义,转义符会结合其后最多三位十进制数。也就是说"\12345"显示为“{45”。
  9. 注意一个转义字符的组合算一个字符,例如'123\x4567'一共6个字符。
  10. 演示:转义字符 <>AAAAAAAAAAAAA
  11. 对于ASCII字符集中有的字符,在计算机内一般按ASCII码存储。但是其他的一些Unicode字符就不一定了。函数string.byte(str)会返回str第一个字符的交换码值(整数)。(直接输出的话是十进制形式。)
    • 对于ASCII字符来说就是ASCII码值。对于其他字符来说就说不定了,而且Lua标准里不要求这个函数在不同平台输出的结果一致。
    • 这个函数可以加可选参数。string.byte(str,i)会返回str的第i个字符的交换码。(从1开始数。)
    • string.byte(str,i,j) 返回多个值,是从第i个到第j个字符的交换码。(包括第i个,第j个。)
  12. string.char是string.byte的逆向操作。它接收任意个整数参数,把接受到的参数转化为对应的字符。然后按顺序把字符组成一个字符串返回。注意: >>str1='helloworld' >str2=string.char(string.byte(str1,1,10)) > 虽然绕了个弯子,但是str2==str1成立。

后续推荐

  • 0X1B写剧本