Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java EE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 JAVA学习日子分享
fhdking





发贴: 28
积分: 0
于 2007-10-16 16:03 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
本人正在参加JAVA培训!把学习中的一些东西发上共享下!希望可以帮助JAVA爱号者!在以后的学习中大家共同进步

1. 同学的一个问题
他用javac(1.4)编译,用java(1.6)运行,出现不支持的类版本错误。我们用javac -version和java -version各看了一下版本,就发现了这个问题。然后查看path环境变量,发现他计算机上安装了oracle,oracle/bin排在了整个path的前面,调整path,让jdk1.6/bin排在最前面即可。
2. 由内存中一切皆二进制引出字符编码的讲解
大陆写的“中”到台湾显示不正常的原理分析,翻译软件的翻译原理,GBK-->“中”-->BIG5。讲解UTF-8编码和unicode编码,ASCII与Unicode码的转换规则,演示记事本显示字符时的趣味问题,分析乱码原因,GB2312码中也包含英文字符,如何识别GB2312码中的英文与汉字。最后课结束时讲了GB18030,如何支持?
3. xml文档中设置encoding属性的重要性
xml文档保存的编码类型和encoding指定的编码方式是两码事,前者表示xml文档内容的编码方式而后者是告诉解析器以什么编码方式来解析xml文档。二者必须一致,否则在浏览器中打开xml文档就会出现问题。默认情况下encoding属性的值是UTF-8。
沈继龙:以为指定了encoding="GBK",那文件就用GBK保存了,这正好理解反了。我是张,我戴顶帽子说明我是张,以便解析软件知道我是谁,如果我戴顶李的帽子,解析软件就认为我是李,显然就出了问题。
4. CDATA区
要小心的是XML文档是通过一个程序生成出来的,如下所示的一个jsp程序,对于用变量生成的信息,
要特别注意加上CDATA区。
<%@page pageEncoding="GBK"%>
<%@page contentType="text/xml;charset=UTF-8"%>
<?xml version="1.0" encoding="UTF-8"?>
<country>
<name>中国</name>
<info><![CDATA[${param.info}]]></info>
</country>
这个JSP文件涉及了两个编码:源文件是用什么码写的,程序执行后以什么码输出结果。
为了加深理解处理软件必须文件中的字符编码的情况,又演示了javac编译utf-8源文件的问题。
与CDATA区类似的一个小技巧:
<%@page pageEncoding="GBK"%>
<form>
<input type="hidden" name="email" value="${param.email}"/>
请输入用户名:<input type="text" name="name" />
</form>
如果给隐藏字段传递的参数是“zxx" a="b”,那么也会出问题,对于程序生成值时,一定要考虑值的特殊情况。
5. 编码转换
编码转换程序:
char [] codes = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
byte b = (byte)Integer.parseInt(args[0]);
System.out.print(codes[((b>>4) & 0x0f)]);
System.out.println(codes[(b & 0x0f)]);
得到字符的big5码
<%@page pageEncoding="GBK"%>
<%@page contentType="text/html;charset=GBK"%>//修改contentType="audio/x-mp3"说明头的作用
<%
String china="中一二";
for(int i=0;i<china.length();i++)
{
out.println(Integer.toHexString((int)china.charAtLight Bulb));
}
System.out.println();
byte[] bufGBK = china.getBytes("GBK");
for(int i=0;i<bufGBK.length;i++)
{
out.println(Integer.toHexString(bufGBK [i]));
}
byte[] buf = china.getBytes("Big5");
for(int i=0;i<buf.length;i++)
{
out.println(Integer.toHexString(buf[i]));
}
byte [] buf ={0xa4, 0xa4,0xa4,0x40,0xa4,0x47}
%>
输出big5码给浏览器:
<%
byte [] buf ={(byte)0xa4, (byte)0xa4,(byte)0xa4,(byte)0x40,(byte)0xa4,(byte)0x47};
response.getOutputStream().write(buf);
%>
6. 区分中文英文的程序代码
buf[] = new byte[1024];
int len = System.in.read(buf);
boolean halfChinese = false;
for(int i=0;i<len;i++)
{
if(halfChinese)
{
//buf[i-1] + buf[i]合并
System.out.write('[');
Systen.out.write(buf[i-1]);
Systen.out.write(buf[i]);
System.out.write(']');
halfChinese = false;
continue;
}
if((buf[i] & 0x80) == 0)
{
//为什么必须用write???
System.out.write('[');
Systen.out.write(buf[i]);
System.out.write(']');
}
else
{
halfChinese = true;
//等下一个,暂时不处理
/*
System.out.write('[');
Systen.out.write(buf[i++]);
Systen.out.write(buf[i]);
System.out.write(']');
*/
}
}
System.out.write();方法要用flush();刷新缓存,才能正常显示。
我写的代码,但还有地方没弄明白:为什么去掉了if()判断是否有'\r','\n'后,显示的结果不正常。
import java.io.*;
class TestInputChinese {
public static void main(String[] args) {
byte[] buf = new byte[1024];
int len = 0;
try {
len = System.in.read(buf);
}catch(IOException e) {
e.printStackTrace();
}
change(buf, len);
}
public static void change(byte[] b, int len) {
for( int i=0; i<len; i++ ) {
if(b[i] == '\r' || b[i] == '\n' ) {
continue;
}
if((b[i] & 0x80) == 0 ) {
System.out.write('[');
System.out.write(b[i]);
System.out.write(']');
} else {
System.out.write('[');
System.out.write(b[i++]);
System.out.write(b[i]);
System.out.write(']');
}
}
System.out.flush();
}
}




话题树型展开
人气 标题 作者 字数 发贴时间
100135 JAVA学习日子分享 fhdking 3647 2007-10-16 16:03
97144 Re:JAVA学习日子分享 fhdking 1568 2007-10-17 13:51
95054 Re:JAVA学习日子分享 fhdking 18 2007-10-25 14:21
95487 Re:JAVA学习日子分享 fhdking 3449 2007-10-25 14:27
95488 Re:JAVA学习日子分享 fhdking 1407 2007-10-26 14:21
95029 Re:JAVA学习日子分享 fhdking 59 2007-10-28 14:17
94993 Re:JAVA学习日子分享 fhdking 1380 2007-10-28 14:21
94982 Re:JAVA学习日子分享 fhdking 841 2007-10-29 14:29
95204 Re:JAVA学习日子分享 fhdking 2640 2007-10-30 13:25
94661 Re:JAVA学习日子分享 wwww6662003 8 2007-11-01 07:47
94830 Re:JAVA学习日子分享 fhdking 72 2007-11-04 13:53
95819 Re:JAVA学习日子分享 fhdking 2678 2007-11-04 13:56
95719 Re:JAVA学习日子分享 fhdking 2274 2007-10-18 14:07
94813 Re:JAVA学习日子分享 fhdking 903 2007-11-05 15:15
95506 缓存问题 fhdking 3108 2007-11-07 15:49
95154 Re:JAVA学习日子分享--路径问题 fhdking 3766 2007-11-07 15:53
94266 Re:JAVA学习日子分享--路径问题 JJ_JJ 57 2007-11-09 01:23
97637 JSP乱码和out内置对象 fhdking 3357 2007-11-08 09:33
94412 Re:JAVA学习日子分享 fhdking 73 2007-11-09 17:57
97119 include和forward方法 fhdking 3648 2007-11-12 10:21
94205 Re:JAVA学习日子分享 王勇 19 2007-11-17 18:05
93914 Re:JAVA学习日子分享 fhdking 46 2007-11-19 15:06
94442 Re:JAVA学习日子分享 fhdking 9819 2007-11-19 15:17
94336 Re:JAVA学习日子分享 fhdking 6200 2007-11-20 11:05
95688 Re:JAVA学习日子分享 fhdking 1623 2007-10-19 13:33
95885 培训日记(利用session自动登录) fhdking 6190 2007-11-21 11:05
92938 Re:JAVA学习日子分享 ws5696611 54 2007-12-26 19:09
93535 Re:JAVA学习日子分享 g007 10 2008-01-14 15:26
95216 Re:JAVA学习日子分享 fhdking 2579 2007-10-21 14:53
95180 Re:JAVA学习日子分享 fhdking 313 2007-10-22 15:46
95501 Re:JAVA学习日子分享 fhdking 1733 2007-10-23 13:42
95280 Re:JAVA学习日子分享 fhdking 1929 2007-10-24 13:37
94834 Re:JAVA学习日子分享 yunshao110 5 2007-10-25 07:51
95012 Re:JAVA学习日子分享 yunshao110 5 2007-10-25 07:54

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923