java转义字符
一.为什么要使用转义字符?
1、 HTML中<、>、&等都有特殊的含义(<,>,用于链接签,&用于转义),不能够直接使用,这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号,需要进行转义。
2、 转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符的原因有两个:第一、“<”和“>”类符号已经用来表示HTML标签,因此就不能直接当做文本中的符号来使用。为了在HTML文档中使用这些符号,这就需要定义它们的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写规则。第二、有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
二、常用的HTML转义字符列表
最常用的字符实体
说明
实体编号
半方大的空白
全方大的空白
空格
 
小于
<
大于
>
&符号
&
双引号
unicode所有字符"
版权
©
乘号
×
除号
÷
转义序列
\b
退格
\f
走纸换行
\n
回车
\r
换行
\t
横向跳格
\'
单引号
\"
双引号
\\
反斜杠
JAVA中转义字符:
1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'
\0:空字符
2.Unicode转义字符:\u + 四个十六进制数字;0~65535
\u0000:空字符
3.特殊字符:就3个
\":双引号
\':单引号
\\:反斜线
4.控制字符:5个
\' 单引号字符
\\ 反斜杠字符
\r 回车
\n 换行
\f 走纸换页
\t 横向跳格
\b 退格
点的转义:. ==> u002E
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C
======================================================================
下面的程序使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符。那么,这个程序会打印什么呢?
Java代码
public class EscapeRout{ 
public static void main(String[] args){ 
// \u0022 是双引号的Unicode转义字符 
System.out.println("a\u0022.length() 
+\u0022b".length()); 
public class EscapeRout{
public static void main(String[] args){
// \u0022 是双引号的Unicode转义字符
System.out.println("a\u0022.length()
+\u0022b".length());
}
}
对该程序的一种很肤浅的分析会认为它应该打印出26,因为在由两个双引号"a\u0022.length()+\u0022b"标识的字符串之间总共有26个字符。
稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中 的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。
理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前, 先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一 个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。
如果该程序的作者确实希望得到这种行为,那么下面的语句将要清楚得多:
Java代码
System.out.println("a".length()+"b".length()); 
更有可能的情况是该作者希望将两个双引号字符置于字符串字面常量的内部。使用Unicode转义字符你是不能实现这一点的,但是你可以使用转义字 符序列来实现[JLS 3.10.6]。表示一个双引号的转义字符序列是一个反斜杠后面紧跟着一个双引号(\”)。如果将最初的程序中的Unicode转义字符用转义字符序列来 替换,那么它将打印出所期望的16(错误,应该是14,不知道是怎么会出来16):
Java代码
System.out.println("a\".length()+\"b".length());
许多字符都有相应的转义字符序列,包括单引号(\')、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。
实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。
普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。
ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。
Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符 串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰 度。
总之,在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符可能会因为它们在编译序列中 被处理得过早而引起混乱。不要使用Unicode转义字符来表示ASCII字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之 外的情况,应该直接将ASCII字符插入到源文件中。
转义字符
  所有的转义字符都是由 '\' 打头的
  第二个字符
      0-9  :八进制
      u    :是Unicode转意,长度固定为6位
      Other:则为以下字母中的一个 b,t,n,f,r,",\
            都不满足,则产生一个编译错误。
  当然了,提供八进制也是为了和C语言兼容.
  b,t,n,f,r 则是为控制字符.书上的意思为:描述数据流的发送者希望那些信息如何被格式化或者被表示.
  Unicode转义字符非常有趣
  它可以写在代码的任意位置,只要转义后是合法的.
  例如:
  int c=0\u003b
  上面的代码可以编译通过,等同于int c=0; \u003b也就是';'的Unicode代码
  上面的例子不能让人很信服,所以特地写了下面这一段代码用来将字符串转换成为unicode
字符
  然后你可以将打印出来的代码放置在EggHello.java中,然后运行它,结果是让人激动的。
/*
* author:鸡蛋 date:2004/11/10 字符串转换为Unicode
*/
public class Asc2Unicode {
PRivate StringBuffer ch;
private StringBuffer tch;
Asc2Unicode(StringBuffer s) {
  ch = s;
  if (ch.length() > 0)
  tch = new StringBuffer(1000);
}
void transform() {
  if (ch.length() < 1)
  return;
  for (int i = 0; i < ch.length(); i++) {
  (new Integer((int) ch.charAt(0))).toString();
  tch.append(new StringBuffer("\\u00"));
  tch.append(new StringBuffer(new HexString((int) ch

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。