转义字符是什么?为什么要使用转义字符?[转义字符定义和意义的详细解释](关键词:Java,C,C++,C#,HTML,PHP,Python)

一、问题背景

博主在准备应聘的笔试、面试时,再次采用了多年以来的Java工具书《Java疯狂讲义》,并决定在每章详细复习后都要在博客中写下详细的阅读笔记。而今天博主在看到《Java疯狂讲义》的 3.4.2字符型 时,该章节提到了转义字符,但只说明了转义字符的用法,并未说明转义字符是什么?为什么要使用转义字符?,因此博主李同学想好好研究一下这个问题,下文是对此问题的详细介绍。

二、转义字符

1.转义字符的定义

转义字符(Escape Character)是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符被当作特殊用途而需要转换回它原来的意义的字符。而转义字符转义是指字符已经被转换了意义。

对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,即不能在显示器上显示,甚至无法从键盘输入;部分控制字符在编辑语言中还被定义为特殊用途。因此只能用转义字符的形式来表示它们。不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以针对常用的控制字符,各类编程语言对转义字符又定义了简写方式。

1.1无法被键盘录入的字符

例如,ASCII码值为7的转义字符\a便是无法被键盘录入的字符\a被转换后的意义是响铃符(BEL),但键盘上没有任何单个按键是可以表示响铃符(BEL)的,因此其需要转义字符\a来表示。

那如果我们想在C语言中使用响铃符,代码如下:

printf("%c",'\a'); //电脑将发出一声“嘀”

1.2被当作特殊用途而需要转换回它原来的意义的字符

例如,HTML中,<便是被当作特殊用途而需要转换回它原来的意义的字符。它被HTML定义为标签的开始,所以当我们在HTML语法的代码中输入<时,HTML就会把它当作为标签的开始,而不是当作一个普通字符<来看待。

2.常见的转义字符

ASCII编码中所有的转义字符和所对应的意义:

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\ 代表一个反斜线字符’’’ 092
代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034
? 代表一个问号 063
\0 空字符(NUL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 十六进制所代表的任意字符 十六进制

注意:

  1. 区分斜杠/与反斜杠\ ,此处不可互换
  2. \xhh 十六进制转义不限制字符个数,即 ‘\x000000000000F’ == ‘\xF’ [3]

3.各类编程语言中的转义字符

其实所有编程语言,拥有转义字符的原因基本上是两点:

  1. 使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号,即无法用键盘上任何单个按键表示。所以只能用转义字符来表示 。
  2. 某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说PHP的双引号",被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符\"了。不然PHP就会报错了。

从上面也可以看出转义无非是两种情况:

  1. 将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键等。
  2. 用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如HTML并不是编程语言,而是标记语言,有些语言只有一种类型,比如shell脚本语言,这些语言中字符串都不加引号,或者既可以加引号也可以不加引号,所以有时候需要转义字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。

再例如,通常情况下HTML会自动截去多余的空格。不管你加多少空格,都被看做一个空格。比如你在两个字符之间加了10个空格,HTML会截去9个空格,只保留一个。为了在网页中增加空格,你可以使用&nbsp表示空格,而&nbsp便是转义字符,在此用来表示空格。

参考文献:
[1]C语言转义字符
[2]JAVA的转义字符
[3]百度百科-转义字符

发布了120 篇原创文章 · 获赞 141 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/wq6ylg08/article/details/104666832
今日推荐