0X1A转义字符
前置知识
正文
- 有的字符在在字符集中有定义,但是我们很很难通过键盘直接输入。这分为两种情况:
- 没有直接对应的按键。例如中文字符在UTF-8中有编码,但是键盘上没有直接输入的按键。
- 字符在源码中有特殊语法含义。例如在单引号括起来的字符串中。如果出现另一个单引号,就可能把句中这个单引号认为是字符串的终结,从而引起语法错误。
- 对于上边提到的两种情况可以使用转义字符这一方案解决。
- 注意,没有对应按键的情况,转义字符只是一种解决方案。还有其他的解决方案存在,例如对于输入中文,可以使用中文输入法通过按键组合输入字符。
- 转义字符的语法在解决问题先“加重”了问题。它新增了一个有语法意义的符号——转义符。在很多语言中,都选择反斜杠符号“\”转义符。每当出现这个字符,其后的一个或更多的字符会和它一起组成一个转义序列,这个序列用来表示一个不能用键盘输入的字符。
- 转义字符一个简单的应用就是。在字符串中出现引号。
- 如果单引号为边界,则字符串中出现单引号需要转义,写为\'。(显示出来就是一个')
- 如果双引号为边界,则字符串中出现双引号也需要转义,写为\"。(显示出来就是一个")
- 如果要在字符中出现反斜杠本身,需要转义它自己——用\表示一个反斜杠。(显示出来就是一个\)
- 一些常用的特殊符号有专用的转移字符:
- \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.'
>
- 特殊转义符组合\z有特殊用途。它不往字面值中增加任何字符,反而会阻止其后空格成为字面值表示的字符串的一部分。其作用范围是从其后到第一个非空格。
>
`
>str='Hello\z My World'
>
str存储的实际内容是“HelloMy World”(不包括引号)。
另外“空白符”,一般指空格、换行、tab。
- 转义字符后也可接一个0到127的十进制整数(含0和127)。然后显示为对应十进制ASCII码的字符。也可以用等价的十六进制数,但是记得以x开头(与十六进制数字字面值不同)。例如:
>
>print('\33\x31\65\x42')
>
输出结果为
>>!1AB
>
注意如果用十进制数转义,转义符会结合其后最多三位十进制数。也就是说"\12345"显示为“{45”。
- 注意一个转义字符的组合算一个字符,例如'123\x4567'一共6个字符。
- 演示:转义字符
<>AAAAAAAAAAAAA
- 对于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个。)
- string.char是string.byte的逆向操作。它接收任意个整数参数,把接受到的参数转化为对应的字符。然后按顺序把字符组成一个字符串返回。注意:
>
>str1='helloworld'
>str2=string.char(string.byte(str1,1,10))
>
虽然绕了个弯子,但是str2==str1成立。
后续推荐