fhdking
发贴: 28
积分: 0
|
于 2007-10-18 14:07
1. XML文档声明 在一个xml文档中必须包含一个文档声明,该声明必须位于文档的第一行,这个声明表示该文档是一个xml文档,以及遵循的是哪个xml版本的规范。 <?xml version="1.0" ?> 在< 和 ? 和 xml 之间、? 和 > 之间不能有空格,在第二个?前可有没有,也可以有一个或多个空格。 XML目前只有一个版本,就是1.0 <?xml version="1.0" encoding="GBK" ?> encoding属性是用来指明文档的字符编码方式。 默认编码方式是两种unicode编码(UTF-8,UTF-16),如果文档中的字符是以UTF-8或UTF-16作为编码,则可以不用设置这个属性 2. XML标记的规范 标记名称中可以包含字母数字以及其他一些可见字符,还必须遵守一些规律: 区分大小写; 不能以数字或下划线开头; 不能以字母组合xml,XML,Xml等开头; 不能包含空格; 名称中间不能包含(:)冒号; 还有一些建议: 不要使用; 不要用减号(-),应该以下划线代替; 名称空间中可以使用非英文字符; 属性值必须用单引号或双引号引起来。 注释:<!-- --> 注意:注释也不能出现在声明语句的前面,注释不能嵌套使用。 注释中不能出现连续的2个减号,例如: <!---------------------------------->这是不行的 <!-- ============================ -->这样可以 CDATA区 CDATA区是指不想被解析程序解析的一片原始数据区 格式:<![CDATA[ 数据 ]]> 与CDATA区类似的一个小技巧: <%@page pageEncoding="GBK"%> <form> <input type="hidden" name="email" value="${param.email}"/> 请输入用户名:<input type="text" name="name" /> </form> 如果给隐藏字段传递的参数是“zxx" a="b”,那么也会出问题,这时候就应该用CDATA区,对于程序生成值时,一定要考虑值的特殊情况。 4. JSP文件涉及了两个编码 <%@page pageEncoding="GBK"%> 源文件是用什么码写的,这里是GBK <%@page contentType="text/xml;charset=UTF-8"%> 程序执行后以什么码输出结果,这里是UTF-8 java程序中的字节码都是Unicode码,当用javac编译原文件时就涉及到一个编码转换的过程,javac编译时可以指定编码: javac -encoding UTF-8 Test.java 告诉javac,源文件是UTF-8编码,如果不写-encoding参数,则用操作系统默认的编码。 5. 十进制转十六进制编码转换程序 public class CodeTest { public static void main(String args[]) { char c[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; byte b = (byte)Integer.parseInt(args[0]); //b在位移时会先自动转换成int后再位移,这是取出高四位 System.out.print(c[(b>>4) & 0x0f]); System.out.println(c[b & 0x0f]);//取出低4位 } } 比如输入的是150 b=二进制的 10010110 移位时自动转换为int型 11111111 11111111 11111111 10010110 位移四位取高位 11111111 11111111 11111111 11111001 与0x0f 00001111 就得到高4位 1001 6. ContentType头 告诉浏览器文件为什么格式,例如: text/html 为网页格式的文件 audio/x-mp3 为音频浏览器会自动打开音频播放器等等。。。 7. 区分文本中的中英文字符程序 public class EnCnTest { public static void main(String args[]) { byte buf[] = args[0].getBytes(); boolean halfChinese = false; for(int i=0;i<buf.length;i++) { if(halfChinese) { byte ch[] = {buf[i-1],buf[i]}; System.out.println("索引"+(i-1)+"位置为中文("+new String(ch)+")"); halfChinese = false; continue; } if((buf[i] & 0x80) == 0) { System.out.println("索引"+i+"位置是英文("+(char)buf[i]+")"); } else { halfChinese = true; } } } }
|