作为一个程序员写代码是每天必做的事,当需要在一个字符串里包含一个换行符时,我们会使用\n
来表示,而不是在编辑器里敲一个回车,这时\n
就是一个字符转义,它代表了编码为10的换行符。当我们加载内容为\n
的文件时,这个文件有2个字符,并且跟换行没有任何关系。
源代码与普通文本
接上面的,虽然我们在源代码和加载来的普通文件里都包含\n
这是2个字符,但是他们被程序输出的却完全不同。当源代码没有被编译时,与普通文本没有任何区别。一旦被编译了,就会有些东西被转义,比如说数值123456789
,当他们没被编译时,他们就是普通的字符串,占9个字节,当被编译为数值int后,变成int类型的数值,占4个字节。
通常会被转义的有:
- 数值(十进制)
123
还是数值123
- 数值(八进制)
0123
变成十进制的83
注(AS中会忽略前面的0,并当做十进制数) - 数值(十六进制)
0x123
变成十进制的293
- 字符串(\) 字符串里通常使用反斜杠(
\\
)后接一个字符来转义,比如\r\n\t\f
当要转义的序列不被支持时,AS将自动忽略\
- 字符串(\) \后直接换行,表示忽略\及后面的回车和换行,用于在多行中写一行的字符串
- 字符串(\xXX) 用2个十六进制编码表示ASCII字符 AS不支持,会将
\
直接忽略 - 字符串(\0xx) 用最多3个八进制编码表示ASCII字符 AS不支持,效果同上
- 字符串(\uxxxx) 用4个十六进制编码表示unicode字符 AS不支持,效果同上
以上这些数值和字符串的转义一定要搞清楚。当直接使用创建正则表达式(非构造函数创建)时,任何字符都不会被转义,但是由构造函数创建的时候,传递的字符串遵循上面的转义原则,因为仅仅是字符串。例如下面的代码输出结果相同。
trace(/s/.source); trace((new RegExp("\s").source);
以上的AS3代码将输出:
\s \s
后话
关于字符编码的,不同的语言对不同的转义的支持度不同。对不支持的转义的处理效果也不同,比如在Java中出现不支持的转义序列时会报错,C++会部分报错,AS3直接忽略掉。
所以在写代码的时候,如果对于不明白的转义,要么规避,要么测试下再写。其实大部分的都不常用。
» 转载请注明来源:www.litefeel.com » 《源代码中的字符转义》
» 本文链接地址:https://www.litefeel.com/characters-escape-in-source-code/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/characters-escape-in-source-code/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 02 月 28 日 01:23
View Comments (2)
@walfred
我这里不是说的字符串处理,是说的代码中的字符串跟普通的文件文件不同的,代码经过编译或者运行环境解释后将拥有不同的意义。不懂python,不过搜了下python的字符串处理,发现果然强大。
各系统的换行符也不一样,另外转义字符很烦,另外说下python这处理字符串比较牛