??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜精品一区二区,亚洲欧洲日韩在线电影,国产午夜亚洲不卡http://www.tkk7.com/adidas1981/category/2031.htmlzh-cnSat, 03 Mar 2007 00:44:06 GMTSat, 03 Mar 2007 00:44:06 GMT60JAVA下中文ؕ码问题的一些解x?/title><link>http://www.tkk7.com/adidas1981/articles/7373.html</link><dc:creator>浩</dc:creator><author>浩</author><pubDate>Fri, 08 Jul 2005 08:14:00 GMT</pubDate><guid>http://www.tkk7.com/adidas1981/articles/7373.html</guid><wfw:comment>http://www.tkk7.com/adidas1981/comments/7373.html</wfw:comment><comments>http://www.tkk7.com/adidas1981/articles/7373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/adidas1981/comments/commentRss/7373.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/adidas1981/services/trackbacks/7373.html</trackback:ping><description><![CDATA[     摘要:      1.字节和unicodejava内核是unicode的,pclass文g也是Q但是很多媒体,包括文g/的保存方式是用字节流的。因此java要对q些字节经行{化。char是unicode的,而byte是字节。java中byte/char互{的函数在sun.io的包中间有。其中ByteToCharConvertercL中调度,可以用来告诉你,?..  <a href='http://www.tkk7.com/adidas1981/articles/7373.html'>阅读全文</a><img src ="http://www.tkk7.com/adidas1981/aggbug/7373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/adidas1981/" target="_blank">浩</a> 2005-07-08 16:14 <a href="http://www.tkk7.com/adidas1981/articles/7373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ArrayList中的数据排序--java对象排序http://www.tkk7.com/adidas1981/articles/7217.htmlWed, 06 Jul 2005 09:59:00 GMThttp://www.tkk7.com/adidas1981/articles/7217.htmlhttp://www.tkk7.com/adidas1981/comments/7217.htmlhttp://www.tkk7.com/adidas1981/articles/7217.html#Feedback0http://www.tkk7.com/adidas1981/comments/commentRss/7217.htmlhttp://www.tkk7.com/adidas1981/services/trackbacks/7217.html ArrayList中的数据排序--java对象排序

常常遇到数组排序的问?比如我有一个Personc?它的实例对象存储在ArrayList数组?现在要把ArrayList数组中的Person对象按照q龄排序.
其实q种情况l常遇到.
下面l出源代?

1:Person.java文g:-------------------------------
public class Person{
 String name;
 int age;
 
 public Person(String name,int age){
  this.name = name;
  this.age = age;
  
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

}


2:Mycomparator.java-------------------------------
//实现Comparator接口,也就是定义排序规?你几乎可以定义Q何规?BR>package com.infoearth;
import java.util.*;
public class Mycomparator implements Comparator{

 public int compare(Object o1,Object o2) {
  Person p1=(Person)o1;
  Person p2=(Person)o2;  
  if(p1.age<p2.age)
   return 1;
  else
   return 0;
 }

}

3:ListSort.java------------------------------------

package com.infoearth;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ListSort {
 public static void main(String[] args){
  ArrayList list = new ArrayList();
  list.add(new Person("lcl",28));
  list.add(new Person("fx",23));
  list.add(new Person("wqx",29));
  Comparator comp = new Mycomparator();
  Collections.sort(list,comp);  
  for(int i = 0;i<list.size();i++){
   Person p = (Person)list.get(i);
   System.out.println(p.getName());
  }  
  
 }

}



2005-07-06 17:59 发表评论
]]>
Java语言的异常类使用讨论 (?http://www.tkk7.com/adidas1981/articles/7184.htmlWed, 06 Jul 2005 03:56:00 GMThttp://www.tkk7.com/adidas1981/articles/7184.htmlhttp://www.tkk7.com/adidas1981/comments/7184.htmlhttp://www.tkk7.com/adidas1981/articles/7184.html#Feedback0http://www.tkk7.com/adidas1981/comments/commentRss/7184.htmlhttp://www.tkk7.com/adidas1981/services/trackbacks/7184.html

    Java异常的语法应该是很简单的Q一个tryQcatchQfinallyQ一个throwsQthrowQ两分钟可学完了。我怿许多人和我一P对于异常是这样处理的Q?BR>1.写程序时q~译器检查,一旦通不q就加tryQcatch;
2.自己抛异常常常忘了在Ҏ(gu)声明时加throwsQ而且又不明白Z么有的异帔R要throwsQ而有的又不需?
3.从来不写自己的异常类Q?BR>4.catch到异怸知道怎么办,通通加一行printStackTrace拉倒;
如果属于以上q几U情늚Q我觉得有必要和我一赯Z下Java的异怋用方法?/FONT>

    查阅资料可以得知QJava最主要的异常类包括4U:Throwable、Error、Exception和RuntimeExceptionQ其中Throwable是所有异常类的父c,它承Objectcdƈ实现Serializable接口QError和Exception都是Throwable的子c;而RuntimeException是Exception的子cRException的子c非常多Q但是RuntimeException是一个特D的子类Q需要单独讨论?BR>    一般当E序员在某个Ҏ(gu)中抛Z个Exception异常Q或者其子类Q时Q需在方法头部声明此Ҏ(gu)抛出了一个异常,是用throws关键字来声明Q但是如果在Ҏ(gu)中抛Z个RuntimeException或者一个ErrorӞ则不需要声明此Ҏ(gu)抛出了异常,q是Z么呢Q?BR>    语法上的U束必然有其背后的道理;如果不去弄明白这些道理而是一味的依赖~辑器来帮忙Q则事倍功半。事实上QJava语言的这U语法含义是QJava~译器要求JavaE序必须捕获或声明所有非q行时的异常Q也是_Exception异常是需查异常,必须q序员对它严格的负责,如果在方法中抛出Q必d明,如果抛出的异常没有被catchQ则会出现语法错误,~译都不能通过。这是强制性的让程序员遵守Java的异常规则。这栯定的原因是当Exception异常出现Ӟq行的程序还有补救的余地Q通过异常处理代码Q可以让E序恢复q行Q如果不捕捉q种异常Q则白白费了补救程序的Z。而且Q这U异常应让程序员可见Q所以必dҎ(gu)头部声明此方法抛Z某种Exception异常?BR>    那么QError和RuntimeException都是不需查异常,在方法中抛出q两U异帔R不需要声明,在程序中不catch它们也不会造成语法错误。我的理解是Q当出现q样的异常时Q运行的E序已经没有补救的余CQ于是直接抛出异常让E序l束是比较合理的安排。如果在E序q行时出CError或者RuntimeExceptionQ那么程序员也无能ؓ力,所以它们可以对E序员透明Q也不需要特意声明让E序员来处理它们?BR>    现在我们知道Qtry和catch一般对Exception及其子类使用Qthrows也是。而对于Error和RuntimeException则不需要throwsQ不q还是可以catch的,但是catch到它们一般也是释放资源Q退出程序而已?BR>    对于catch到的异常的处理,最l常犯的错误是丢失异常Qcatch到旧的异常抛出新的异常,{到E序出错时就找不到旧异常的信息了。其实JDK1.4已经提供了这个问题的解决Ҏ(gu)Q就是用Exception的构造函数Ş成异帔RQ用旧异怽为参数构造新异常Q这样就可以在出错时一步步跟踪到所有出现过的异怺Q这两个构造函数就是:
    public Exception(String message, Throwable cause) {
    super(message, cause);
    }
    public Exception(Throwable cause) {
        super(cause);
    }
    想到这么多Q以后有了新体会再箋?/FONT>

                                                                           2005-03-02 15:40 作? wxb_nudt



2005-07-06 11:56 发表评论
]]>
最安全的加密算?http://www.tkk7.com/adidas1981/articles/7181.htmlWed, 06 Jul 2005 03:11:00 GMThttp://www.tkk7.com/adidas1981/articles/7181.htmlhttp://www.tkk7.com/adidas1981/comments/7181.htmlhttp://www.tkk7.com/adidas1981/articles/7181.html#Feedback0http://www.tkk7.com/adidas1981/comments/commentRss/7181.htmlhttp://www.tkk7.com/adidas1981/services/trackbacks/7181.html在密码学里,有一U理想的加密Ҏ(gu)Q叫做一ơ一密ؕ码本Qone-time padQ?BR>
one-time pad的算法有以下要求Q?BR>1、密钥必随Z?BR>2、密钥不能重复?BR>3、密钥和密文的长度是一L?BR>
one-time pad是最安全的加密算法,双方一旦安全交换了密钥Q之后交换信息的q程是l对安全的啦。这U算法一直在一些要求高度机密的场合使用Q据说美国和前苏联之间的热线?sh)话、前苏联的间谍都是用One-time pad的方式加密的。不超U计机工作多久Q也不管多少人,用什么方法和技术,h多大的计能力,都不可能破解?BR>
一ơ一密的一U实现方式,如下Q?BR>
public class OneTimePadUtil {
    
public static byte[] xor(byte[] bytes, byte[] keyBytes) 
{
        
if (keyBytes.length != bytes.length) 
{
            
throw new
 IllegalArgumentException();
        }


        
byte[] resultBytes = new byte[bytes.length];

        
for (int i = 0; i < resultBytes.length; ++i) 
{
            resultBytes[i] 
= (byte) (keyBytes[i] ^
 bytes[i]);
        }


        
return resultBytes;
    }

}

使用例子Q?BR>
String plainText = "温少";
String keyText 
= "密码"
;

byte[] plainBytes =
 plainText.getBytes();
byte[] keyBytes =
 keyText.getBytes();

assert plainBytes.length 
==
 keyBytes.length;

//加密

byte[] cipherBytes = OneTimePadUtil.xor(plainBytes, keyBytes);

//解密

byte[] cipherPlainBytes = OneTimePadUtil.xor(cipherBytes, keyBytes);


q是最单的加密法Q但也是最安全的机密算法。前天和朋友讨论Cq个问题Q所以写了这文章?/FONT>



2005-07-06 11:11 发表评论
]]>
如何使用JCE的DESq行加密解密 http://www.tkk7.com/adidas1981/articles/7179.htmlWed, 06 Jul 2005 02:47:00 GMThttp://www.tkk7.com/adidas1981/articles/7179.htmlhttp://www.tkk7.com/adidas1981/comments/7179.htmlhttp://www.tkk7.com/adidas1981/articles/7179.html#Feedback0http://www.tkk7.com/adidas1981/comments/commentRss/7179.htmlhttp://www.tkk7.com/adidas1981/services/trackbacks/7179.htmlpackage sample;

import java.security.
*
;
import javax.crypto.
*
;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author George Hill
 * @version 1.0
 
*/


public class Test {
  
  
// 加密使用的Key

  private SecretKey key;
  
  
// 加密法QJCE可用DES,DESede和Blowfish

  private static final String algorithm = "DES";
  
  
public Test() throws NoSuchAlgorithmException 
{
    KeyGenerator generator 
=
 KeyGenerator.getInstance(algorithm);
    key 
=
 generator.generateKey();
  }

  
  
/**
   * 利用DES法加密
   * @param s String 需要加密的字符?BR>   * @return String 加密后的字符?BR>   * @throws Exception
   
*/

  
public String encryptData(String s) throws Exception {
    Cipher c 
=
 Cipher.getInstance(algorithm);
    c.init(Cipher.ENCRYPT_MODE, key);

    
return new
 String(c.doFinal(s.getBytes()));
  }

  
  
/**
   * 利用DES法解密
   * @param s String 需要解密的字符?BR>   * @return String 解密后的字符?BR>   * @throws Exception
   
*/

  
public String decryptData(String s) throws Exception {
    Cipher c 
=
 Cipher.getInstance(algorithm);
    c.init(Cipher.DECRYPT_MODE, key);

    
return new
 String(c.doFinal(s.getBytes()));
  }

  
  
/**
   * 试E序
   * @param args String[]
   * @throws Exception
   
*/

  
public static void main(String[] args) throws Exception {
    String s 
= "Hello"
;
    Test test 
= new
 Test();
    String encrypt 
=
 test.encryptData(s);
    System.
out
.println(encrypt);
    String decrypt 
=
 test.decryptData(encrypt);
    System.
out
.println(decrypt);
  }

}



2005-07-06 10:47 发表评论
]]>目开发规?/title><link>http://www.tkk7.com/adidas1981/articles/7132.html</link><dc:creator>浩</dc:creator><author>浩</author><pubDate>Tue, 05 Jul 2005 05:44:00 GMT</pubDate><guid>http://www.tkk7.com/adidas1981/articles/7132.html</guid><wfw:comment>http://www.tkk7.com/adidas1981/comments/7132.html</wfw:comment><comments>http://www.tkk7.com/adidas1981/articles/7132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/adidas1981/comments/commentRss/7132.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/adidas1981/services/trackbacks/7132.html</trackback:ping><description><![CDATA[<P><FONT color=#0000ff size=2>目开发规?/FONT></P> <P><FONT color=#0000ff size=2>一、目?nbsp;   </FONT></P> <P><FONT color=#0000ff size=2>  对于代码Q首要要求是它必L,能够按照E序员的真实思想去运行;W二个的要求是代码必L晰易懂,使别的程序员能够Ҏ(gu)理解代码所q行的实际工作。在软g工程领域Q源E序的风格统一标志着可维护性、可L,是Y仉目的一个重要组成部分。而目前还没有成文的编码风格文档,以致于很多时候,E序员没有一个共同的标准可以遵守Q编码风格各异,E序可维护性差、可L也很差。通过建立代码~写规范QŞ成开发小l编码约定,提高E序的可靠性、可L、可修改性、可l护性、可l承性和一致性,可以保证E序代码的质量,l承软g开发成果,充分利用资源Q开发h员之间的工作成果可以׃n?/FONT></P> <P><FONT color=#0000ff size=2>    本文在参考业界已有的~码风格的基上,描述了一个基?JBuilder 的项目风|力求一U统一的编E风|q从整体~码风格、代码文仉根{函数编写风根{变量风根{注释风格等几个斚wq行阐述。(q些规范q不是一定要l对遵守Q但是一定要让程序有良好的可L)</FONT></P> <P><BR><FONT color=#0000ff size=2>二、整体编码风?/FONT></P> <P><FONT color=#0000ff size=2>1、羃q?/FONT></P> <P><FONT color=#0000ff size=2>    ~进?个空gؓ单位。徏议在 Tools/Editor Options 中设|?Editor 面的Block ident?QTab Size ?。预处理语句、全局数据、标题、附加说明、函数说明、标L均顶g写。语句块?{"?}"配对寚wQƈ与其前一行对齐,语句块类的语句羃q徏议每?{"?}"单独占一行,便于匹对。JBuilder 中的默认方式是开始的"{"不是单独一行,更改成上q格式(?Project/Default Project Properties 中设|?Code Style 中选择 Braces ?Next lineQ?/FONT></P> <P><FONT color=#0000ff size=2>2、空?/FONT></P> <P><FONT color=#0000ff size=2>    原则上变量、类、常量数据和函数在其cdQ修饰名UC间适当I格q据情况寚w。关键字原则上空一|如:if ( ...  {。运符的空D定如下:"::"?->"?["?]"?++"?--"?~"?!"?+"?-"Q指正负P?&"Q引用){几个运符两边不加I格Q其中单目运符pL与操作数相连的一边)Q其它运符Q包括大多数二目q算W和三目q算W??:"两边均加一I格Q在作函数定义时q可据情况多I或不空格来寚wQ但在函数实现时可以不用?,"q算W只在其后空一|需寚w时也可不I或多空根{不论是否有括号Q对语句行后加的注释应用适当I格与语句隔开q尽可能寚w。个为此可以依照个Z惯决定遵循与否?/FONT></P> <P><FONT color=#0000ff size=2>3、对?/FONT></P> <P><FONT color=#0000ff size=2>    原则上关pd切的行应寚wQ对齐包括类型、修饰、名U、参数等各部分对齐。另每一行的长度不应过屏幕太多Q必要时适当换行Q换行时可能在","处或q算W处Q换行后最好以q算W打_q且以下各行均以该语句首行羃q,但该语句仍以首行的羃qؓ准,卛_其下一行ؓ“{”应与首行对齐?/FONT></P> <P><FONT color=#0000ff size=2>    变量定义最好通过dI格形成寚wQ同一cd的变量最好放在一赗如下例所C:<BR>int        Value;<BR>int        Result;<BR>int        Length;<BR>DWORD      Size;<BR>DWORD      BufSize;</FONT></P> <P><FONT color=#0000ff size=2> 个h认ؓ此项可以依照个h习惯军_遵@与否?/FONT></P> <P><FONT color=#0000ff size=2>4、空?/FONT></P> <P><FONT color=#0000ff size=2> 不得存在无规则的IQ比如说q箋十个I。程序文件结构各部分之间IZ行,若不必要也可只空一行,各函数实C间一般空两行Q由于每个函数还要有函数说明注释Q故通常只需IZ行或不空Q但对于没有函数说明的情况至应再空一行。对自己写的函数Q徏议也加上?/------”做分隔。函数内部数据与代码之间应空臛_一行,代码中适当处应以空行空开Q徏议在代码中出现变量声明时Q在其前IZ行。类中四个“p”之间至空一行,在其中的数据与函C间也应空行?/FONT></P> <P><FONT color=#0000ff size=2>5、注?/FONT></P> <P><FONT color=#0000ff size=2> 注释是Y件可L的具体体现。程序注释量一般占E序~码量的20%QY件工E要求不于20%。程序注释不能用抽象的语aQ类g"处理"?循环"q样的计机抽象语言Q要_表达出程序的处理说明。例如:"计算净需??计算W一道工序的加工工时"{。避免每行程序都使用注释Q可以在一D늨序的前面加一D|释,h明确的处理逻辑?/FONT></P> <P><FONT color=#0000ff size=2> 注释必不可少Q但也不应过多,不要被动的ؓ写注释而写注释。以下是四种必要的注释:<BR> <BR>A. 标题、附加说明?/FONT></P> <P><FONT color=#0000ff size=2>B. 函数、类{的说明。对几乎每个函数都应有适当的说明,通常加在函数实现之前Q在没有函数实现部分的情况下则加在函数原型前Q其内容主要是函数的功能、目的、算法等说明Q参数说明、返回D明等Q必要时q要有一些如特别的Yg要求{说明。公用函数、公用类的声明必ȝ注解说明其用方法和设计思\Q当焉择恰当的命名格式能够帮助你把事情解释得更清楚?/FONT></P> <P><FONT color=#0000ff size=2>C. 在代码不明晰或不可移植处必须有一定的说明?/FONT></P> <P><FONT color=#0000ff size=2>D. 及少量的其它注释Q如自定义变量的注释、代码书写时间等?/FONT></P> <P><FONT color=#0000ff size=2>  注释有块注释和行注释两种Q分别是指:"/**/"?//"对A用块注释QD用行注释QB、C则视情况而定Q但应统一Q至在一个单元中BcL释Ş式应l一。具体对不同文g、结构的注释会在后面详细说明?/FONT></P> <P><FONT color=#0000ff size=2>6、代码长?/FONT></P> <P><FONT color=#0000ff size=2> 对于每一个函数徏议尽可能控制其代码长度ؓ53行左叻I过53行的代码要重新考虑其拆分Z个或两个以上的函数。函数拆分规则应该一不破坏原有算法ؓ基础Q同时拆分出来的部分应该是可以重复利用的。对于在多个模块或者窗体中都要用到的重复性代码,完全可以v独立成ؓ一个具备公用性质的函敎ͼ攄于一个公用模块中?/FONT></P> <P><FONT color=#0000ff size=2>7、页?/FONT></P> <P><FONT color=#0000ff size=2> 宽应该讄?0字符。源代码一般不会超q这个宽? q导致无法完整显C? 但这一讄也可以灵z调? 在Q何情况下, 长的语句应该在一个逗号或者一个操作符后折? 一条语句折行后, 应该比原来的语句再羃q?个字W? </FONT></P> <P><FONT color=#0000ff size=2>8、行?/FONT></P> <P><FONT color=#0000ff size=2> 一般的集成~程环境下,每屏大概只能昄不超q?0行的E序Q所以这个函数大概要5-6屏显C,在某些环境下?屏左x能显C完。这样一来,无论是读E序q是修改E序Q都会有困难。因此徏议把完成比较独立功能的程序块抽出Q单独成Z个函数。把完成相同或相q功能的E序块抽出,独立Z个子函数。可以发玎ͼ是上层的函数越单,是调用几个子函敎ͼ是底层的函数完成的是具体的工作。这是好E序的一个标志。这P我们可以在较上层函数里Ҏ(gu)控制整个E序的逻辑Q而在底层的函数里专注于某斚w的功能的实现了?/FONT></P> <P><BR><FONT color=#0000ff size=2>三、代码文仉?/FONT></P> <P><FONT color=#0000ff size=2>所有的 Java(*.java) 文g都必遵守如下的样式规则Q?/FONT></P> <P><FONT color=#0000ff size=2>. 文g生成</FONT></P> <P><FONT color=#0000ff size=2>对于规范?JAVA zc,量?JBuilder ?Object Gallery 工具来生成文件格式,避免用手工制作的头文?实现文g?BR> <BR>. package/import </FONT></P> <P><FONT color=#0000ff size=2>package 行要?import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母序排列。如?import 行中包含了同一个包中的不同子目录,则应该用 * 来处理?</FONT></P> <P><FONT color=#0000ff size=2>package hotlava.net.stats;</FONT></P> <P><FONT color=#0000ff size=2>import java.io.*;<BR>import java.util.Observable;<BR>import hotlava.util.Application;  <BR> <BR>q里 java.io.* 使用来代替InputStream and OutputStream 的?/FONT></P> <P><FONT color=#0000ff size=2>. 文g头部注释</FONT></P> <P><FONT color=#0000ff size=2>文g头部注释主要是表明该文g的一些信息,是程序的M说明Q可以增强程序的可读性和可维护性。文件头部注释一般位?package/imports 语句之后QClass 描述之前。要求至写出文件名、创、创建时间和内容描述。JBuilder ?Object Gallery 工具生成的代码中会在cR工E文件中{自动添加注释,我们也要d一些注释,其格式应该尽量约束如下:</FONT></P> <P><FONT color=#0000ff size=2>/**<BR> * Title:  定鼠标位置c?BR> * Description: 定鼠标当前在哪个作业栏位中q返回作业号<BR> * @Copyright: Copyright (c) 2002<BR> * @Company: HIT<BR> * @author: rivershan<BR> * @version: 1.0<BR> * @time: 2002.10.30<BR> */<BR> <BR>. Class </FONT></P> <P><FONT color=#0000ff size=2>接下来的是类的注释,一般是用来解释cȝ?</FONT></P> <P><FONT color=#0000ff size=2>/**<BR> * A class representing a set of packet and byte counters<BR> * It is observable to allow it to be watched, but only<BR> * reports changes when the current set is complete<BR> */ <BR> <BR>接下来是cd义,包含了在不同的行?extends ?implements </FONT></P> <P><FONT color=#0000ff size=2>public class CounterSet<BR>  extends Observable<BR>  implements Cloneable </FONT></P> <P><FONT color=#0000ff size=2>.Class Fields </FONT></P> <P><FONT color=#0000ff size=2>接下来是cȝ成员变量Q?</FONT></P> <P><FONT color=#0000ff size=2>/**<BR> * Packet counters<BR> */<BR> <BR>protected int[] packets;<BR> <BR>public 的成员变量必ȝ成文档(JavaDocQ。proceted、private?package 定义的成员变量如果名字含义明的话,可以没有注释?/FONT></P> <P><FONT color=#0000ff size=2>. 存取Ҏ(gu)<BR> <BR>接下来是cd量的存取的方法。它只是单的用来类的变量赋D取值的话,可以单的写在一行上。(个h认ؓ量分行写)</FONT></P> <P><FONT color=#0000ff size=2>/**<BR> * Get the counters<BR> * @return an array containing the statistical data.  This array has been<BR> * freshly allocated and can be modified by the caller.<BR> */<BR> <BR>public int[] getPackets() <BR>{<BR>  return copyArray(packets, offset); <BR>}</FONT></P> <P><FONT color=#0000ff size=2>public int[] getBytes() <BR>{ <BR> return copyArray(bytes, offset); <BR>}</FONT></P> <P><FONT color=#0000ff size=2>public int[] getPackets() <BR>{ <BR> return packets; <BR>}</FONT></P> <P><FONT color=#0000ff size=2>public void setPackets(int[] packets) <BR>{ <BR> this.packets = packets; <BR>}<BR> <BR>其它的方法不要写在一行上</FONT></P> <P><FONT color=#0000ff size=2>. 构造函?</FONT></P> <P><FONT color=#0000ff size=2>接下来是构造函敎ͼ它应该用递增的方式写Q比如:参数多的写在后面Q?</FONT></P> <P><FONT color=#0000ff size=2>讉Kcd("public","private" {?)和Q?static","final"?synchronized"应该在一行中Qƈ且方法和参数另写一行,q样可以使方法和参数更易诅R?</FONT></P> <P><FONT color=#0000ff size=2>public<BR>CounterSet(int size)<BR>{<BR>   this.size = size;<BR>}</FONT></P> <P><FONT color=#0000ff size=2>. 克隆Ҏ(gu)<BR> <BR>如果q个cL可以被克隆的Q那么下一步就?clone Ҏ(gu)Q?</FONT></P> <P><FONT color=#0000ff size=2>public<BR>Object clone()<BR>{<BR> try <BR>   {<BR>     CounterSet obj = (CounterSet)super.clone();<BR>     obj.packets = (int[])packets.clone();<BR>     obj.size = size;<BR>     return obj;<BR>   }  <BR>   catch(CloneNotSupportedException e) <BR>   {<BR>    throw new InternalError("Unexpected CloneNotSUpportedException: " <BR>          + e.getMessage());<BR>   }<BR>} </FONT></P> <P><FONT color=#0000ff size=2>. cL?</FONT></P> <P><FONT color=#0000ff size=2>下面开始写cȝҎ(gu)Q?</FONT></P> <P><FONT color=#0000ff size=2>/**<BR> * Set the packet counters<BR> * (such as when restoring from a database)<BR> */<BR>protected final<BR>void setArray(int[] r1, int[] r2, int[] r3, int[] r4)<BR>  throws IllegalArgumentException<BR>{<BR> //<BR>   // Ensure the arrays are of equal size<BR>   //<BR>   if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)<BR>  throw new IllegalArgumentException("Arrays must be of the same size";<BR>   System.arraycopy(r1, 0, r3, 0, r1.length);<BR>   System.arraycopy(r2, 0, r4, 0, r1.length);<BR>} </FONT></P> <P><FONT color=#0000ff size=2>. toString Ҏ(gu) </FONT></P> <P><FONT color=#0000ff size=2>无论如何Q每一个类都应该定?toString Ҏ(gu)Q?</FONT></P> <P><FONT color=#0000ff size=2>public<BR>String toString()<BR>{<BR> String retval = "CounterSet: ";<BR>    for (int i = 0; i < data.length(); i++) <BR>    {<BR>       retval += data.bytes.toString();<BR>       retval += data.packets.toString();<BR>    }<BR>    return retval;<BR>}</FONT></P> <P><FONT color=#0000ff size=2>. main Ҏ(gu) </FONT></P> <P><FONT color=#0000ff size=2>如果main(String[]) Ҏ(gu)已经定义? 那么它应该写在类的底? </FONT></P> <P><BR><FONT color=#0000ff size=2>四、函数编写风?/FONT></P> <P><FONT color=#0000ff size=2>. 函数的命?/FONT></P> <P><FONT color=#0000ff size=2>通常Q函数的命名也是以能表达函数的动作意义ؓ原则的,一般是由动词打_然后跟上表示动作对象的名词,各单词的首字母应该大写。另外,q有一些函数命名的通用规则。如取数Q则用Get打头Q然后跟上要取的对象的名字;讄敎ͼ则用Set打头Q然后跟上要讄对象的名字;而对象中Z响应消息q行动作的函敎ͼ可以命名为On打头Q然后是相应的消息的名称Q进行主动动作的函数Q可以命名ؓDo打头Q然后是相应的动作名U。类似的规则q有很多Q需要程序员多读优秀的程序,逐渐U篏l验Q才能作出好的函数命名?/FONT></P> <P><FONT color=#0000ff size=2>. 函数注释</FONT></P> <P><FONT color=#0000ff size=2>pȝ自动生成的函敎ͼ如鼠标动作响应函数等Q不必太多的注释和解释;</FONT></P> <P><FONT color=#0000ff size=2>对于自行~写的函敎ͼ若是pȝ关键函数Q则必须在函数实现部分的上方标明该函数的信息Q格式如下:</FONT></P> <P><FONT color=#0000ff size=2>/**<BR>* 函数名:<BR>* ~写者:<BR>* 参考资料:<BR>* ?nbsp; 能:<BR>* 输入参数Q?BR>* 输出参数Q?BR>* ?nbsp; 注:<BR>*/</FONT></P> <P><FONT color=#0000ff size=2>希望量遵@以上格式?/FONT></P> <P><BR><FONT color=#0000ff size=2>五、符号风?/FONT></P> <P><FONT color=#0000ff size=2>. M要求</FONT></P> <P><FONT color=#0000ff size=2>对于各种W号的定义,都有一个共通点Q就是应该用有实际意义的英文单词或英文单词的羃写,不要使用单但没有意义的字Ԍ可能不使用阿拉伯数字,更切忌用中文拼音的首字母。如q样的名U是不提倡的QValue1,Value2,Value3,Value4 …?/FONT></P> <P><FONT color=#0000ff size=2>例如Q?BR>file(文g),code(~号),data(数据),pagepoint(面指针), faxcode(传真? ,address(地址),bank(开户银?,…?/FONT></P> <P><FONT color=#0000ff size=2>. 变量名称</FONT></P> <P><FONT color=#0000ff size=2>变量命名由(前缀+修饰语)构成。现在比较流行的是一套由微Y的一个匈牙利软g工程师首先用,q且在微软推q开来,现在被称之ؓ匈牙利命名法的命名规则。匈牙利命名法规定,使用表示标识W所对应的变量类型的英文写~写作ؓ标识W的前缀Q后面在使用表示变量意义的英文单词或~写q行命名。下面是匈牙利命名法中的一些命名方式:</FONT></P> <P><FONT color=#0000ff size=2>Q?Q生存期修饰Q用l(local)表示局域变量,p(public)表示全局变量Qs(send)表示参数变量</FONT></P> <P><FONT color=#0000ff size=2>Q?Q类型修饎ͼ用s(AnsiString)表示字符?c(char)表示字符,n(number)数?i(intger)表示整数,d(double)表示双精?f(float)点?b(bool)布尔?d(date)表示日期?</FONT></P> <P><FONT color=#0000ff size=2>例如Q?BR>li_length表示整Ş的局域变?是用来标识长度的.ls_code表示字符型的局域变?用来标识代码.</FONT></P> <P><FONT color=#0000ff size=2>. 控g名称</FONT></P> <P><FONT color=#0000ff size=2>控g命名由(前缀+修饰语)构成。前~即ؓ控g的名U?/FONT></P> <P><FONT color=#0000ff size=2>按钮变量  Button+Xxxxxxx    例如QButtonSave,ButtonExit,ButtonPrint{?BR>题标变量  Label+Xxxxxxxx    例如QLabelName,LabelSex{?BR>数据表变?Table+Xxxxxx      例如QTableFile,TableCount{?BR>查询变量  Query+Xxxxxx      例如QQueryFile,QueryCeneter{?BR>数据源变?DataSource+Xxx      例如QDataSourceFile,DataSourceCenter{?BR>。。。。。。。。。。。。。。。?BR>(注:对于与表有关的控件“修饰语”部分最好直接用表名?</FONT></P> <P><FONT color=#0000ff size=2>. Package 的命?</FONT></P> <P><FONT color=#0000ff size=2>Package 的名字应该都是由一个小写单词组成?</FONT></P> <P><FONT color=#0000ff size=2>. Class 的命?</FONT></P> <P><FONT color=#0000ff size=2>Class 的名字必ȝ一个或C能表达该cȝ意思的大写字母开头而其它字母都写的单词或~写l成Q这栯使这?Class 的名U能更容易被理解?/FONT></P> <P><FONT color=#0000ff size=2>. Class 变量的命?</FONT></P> <P><FONT color=#0000ff size=2>变量的名字必ȝ一个小写字母开头。后面的单词用大写字母开头。对于类的成员变量,在对其标识符命名Ӟ要加上代表memberQ成员)的前~m_。例如一个标识符为m_dwFlagQ则它表C的变量是一个类型ؓ双字的成员变量,它是代表一个标志?/FONT></P> <P><FONT color=#0000ff size=2>. Static Final 变量的命?</FONT></P> <P><FONT color=#0000ff size=2>Static Final 变量的名字应该都大写Qƈ且指出完整含义?</FONT></P> <P><FONT color=#0000ff size=2>. 参数的命?</FONT></P> <P><FONT color=#0000ff size=2>参数的名字必d变量的命名规范一致?</FONT></P> <P><FONT color=#0000ff size=2>. 数组的命?</FONT></P> <P><FONT color=#0000ff size=2>数组应该L用下面的方式来命名:<BR>byte[] buffer;  <BR> <BR>而不是: <BR>byte buffer[]; </FONT></P> <P><FONT color=#0000ff size=2>. Ҏ(gu)的参?BR> <BR>使用有意义的参数命名Q如果可能的话,使用和要赋值的字段一L名字Q?</FONT></P> <P><FONT color=#0000ff size=2>SetCounter(int size)<BR>{<BR> this.size = size;<BR>} </FONT></P> <P><FONT color=#0000ff size=2>. 秘的数</FONT></P> <P><FONT color=#0000ff size=2>首先要说什么是秘的数。我们在E序里经怼用到一些量Q它是有特定的含义的。例如,现在我们写一个薪金统计程序,公司员工?0人,我们在程序里׃?0q个数去q行各种各样的运。在q里Q?0是"秘的数"。ؓ什么称它ؓ秘呢?因ؓ别的E序员在E序里看?0q个敎ͼ不知道它的含义,只能靠猜了?/FONT></P> <P><FONT color=#0000ff size=2>在程序里出现"秘的数"会降低程序的可读性,应该量避免。避免的Ҏ(gu)是把秘的数定义Z个常量。注意这个常量的命名应该能表达该数的意义Qƈ且应该全部大写,以与对应于变量的标识W区别开来。例如上?0q个敎ͼ我们可以定义Z个名为NUMOFEMPLOYEES的常量来代替。这P别的E序员在ȝ序的时候就可以Ҏ(gu)理解了?/FONT></P> <P><FONT color=#0000ff size=2>六、程序编写风?/FONT></P> <P><FONT color=#0000ff size=2>. exit() </FONT></P> <P><FONT color=#0000ff size=2>exit 除了?main 中可以被调用外,其他的地方不应该调用。因样做不给M代码代码Z来截获退出。一个类似后台服务地E序不应该因为某一个库模块军_了要退出就退出?</FONT></P> <P><FONT color=#0000ff size=2>. 异常 </FONT></P> <P><FONT color=#0000ff size=2>x的错误应该抛Z个RuntimeException或者派生的异常?<BR>层的main()函数应该截获所有的异常Qƈ且打华ͼ或者记录在日志中)在屏q上?</FONT></P> <P><FONT color=#0000ff size=2>. 垃圾攉 </FONT></P> <P><FONT color=#0000ff size=2>JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会D一个问题:你必d使用完对象的实例以后q行清场工作。比如一个prel的程序员可能q么写: </FONT></P> <P><FONT color=#0000ff size=2> ...<BR> {<BR>  FileOutputStream fos = new FileOutputStream(projectFile);<BR>  project.save(fos, "IDE Project File"; <BR> }<BR> ...<BR> <BR>除非输出一Z用域关闭,非引用计数的E序语言Q比如JAVAQ是不能自动完成变量的清场工作的。必象下面一样写Q?</FONT></P> <P><FONT color=#0000ff size=2> FileOutputStream fos = new FileOutputStream(projectFile);<BR> project.save(fos, "IDE Project File"; <BR> fos.close();</FONT></P> <P><FONT color=#0000ff size=2>. Clone </FONT></P> <P><FONT color=#0000ff size=2>下面是一U有用的Ҏ(gu)Q?<BR>implements Cloneable</FONT></P> <P><FONT color=#0000ff size=2>public<BR>Object clone()<BR>{<BR> try <BR> {<BR>  ThisClass obj = (ThisClass)super.clone();<BR>  obj.field1 = (int[])field1.clone();<BR>  obj.field2 = field2;<BR>  return obj;<BR> } <BR> catch(CloneNotSupportedException e) <BR> {<BR>  throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());<BR> }<BR>} </FONT></P> <P><FONT color=#0000ff size=2>. final c?</FONT></P> <P><FONT color=#0000ff size=2>l对不要因ؓ性能的原因将cd义ؓ final 的(除非E序的框架要求) <BR>如果一个类q没有准备好被承,最好在cL档中注明Q而不要将她定义ؓ final 的。这是因为没有h可以保证会不会由于什么原因需要承她?BR> <BR>. 讉Kcȝ成员变量<BR> <BR>大部分的cL员变量应该定义ؓ protected 的来防止l承cM用他们?<BR>注意Q要?int[] packets"Q而不?int packets[]"Q后一U永q也不要用?</FONT></P> <P><FONT color=#0000ff size=2>public void setPackets(int[] packets) <BR>{ <BR> this.packets = packets; <BR>}<BR>CounterSet(int size)<BR>{<BR> this.size = size;<BR>}</FONT></P> <P><FONT color=#0000ff size=2>. byte 数组转换?characters </FONT></P> <P><FONT color=#0000ff size=2>Z?byte 数组转换?charactersQ你可以q么做: </FONT></P> <P><FONT color=#0000ff size=2>"Hello world!".getBytes(); </FONT></P> <P><FONT color=#0000ff size=2>. Utility c?</FONT></P> <P><FONT color=#0000ff size=2>Utility c(仅仅提供Ҏ(gu)的类Q应该被x为抽象的来防止被l承或被初始化?</FONT></P> <P><FONT color=#0000ff size=2>. 初始?BR> <BR>下面的代码是一U很好的初始化数l的Ҏ(gu)Q?</FONT></P> <P><FONT color=#0000ff size=2>objectArguments = new Object[] <BR>{ <BR> arguments <BR>}; </FONT></P> <P><FONT color=#0000ff size=2>. 枚Dcd<BR> <BR>JAVA Ҏ(gu)丄支持不好Q但是下面的代码是一U很有用的模板: </FONT></P> <P><FONT color=#0000ff size=2>class Colour <BR>{<BR>   public static final Colour BLACK = new Colour(0, 0, 0);<BR>   public static final Colour RED = new Colour(0xFF, 0, 0);<BR>   public static final Colour GREEN = new Colour(0, 0xFF, 0);<BR>   public static final Colour BLUE = new Colour(0, 0, 0xFF);<BR>   public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);<BR>}<BR> <BR>q种技术实CRED, GREEN, BLUE {可以象其他语言的枚丄型一样用的帔R?他们可以?'==' 操作W来比较?<BR>但是q样使用有一个缺P如果一个用Lq样的方法来创徏颜色 BLACK </FONT></P> <H1><FONT color=#0000ff>new Colour(0,0,0) </FONT></H1> <P><FONT color=#0000ff size=2>那么q就是另外一个对象,'=='操作W就会生错误。她?equal() Ҏ(gu)仍然有效。由于这个原因,q个技术的~陷最好注明在文档中,或者只在自q包中使用?/FONT></P> <P><FONT color=#0000ff size=2>. 混合使用 AWT ?Swing lg </FONT></P> <P><FONT color=#0000ff size=2>如果要将 AWT lg?Swing lg混合h使用的话Q请心使用。实际上Q尽量不要将他们混合h使用?</FONT></P> <P><FONT color=#0000ff size=2>. 滚动?AWT lg </FONT></P> <P><FONT color=#0000ff size=2>AWT lgl对不要?JscrollPane cL实现滚动。滚?AWT lg的时候一定要?AWT ScrollPane lg来实现?/FONT></P> <P><FONT color=#0000ff size=2>. 避免?InternalFrame lg中?AWT lg<BR> <BR>量不要q么做,要不然会出现不可预料的后果?</FONT></P> <P><FONT color=#0000ff size=2>. Z-Order 问题 </FONT></P> <P><FONT color=#0000ff size=2>AWT lgL昄?Swing lg之上。当使用包含 AWT lg?POP-UP 菜单的时候要心Q尽量不要这样用?</FONT></P> <P><BR><FONT color=#0000ff size=2>八、性能 </FONT></P> <P><FONT color=#0000ff size=2> 在写代码的时候,从头臛_都应该考虑性能问题。这不是说时间都应该费在优化代码上Q而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有旉来实C个高效的法Q那么我们应该在文档中记录下来,以便在以后有I的时候再来实现她?</FONT></P> <P><FONT color=#0000ff size=2> 不是所有的人都同意在写代码的时候应该优化性能q个观点的,他们认ؓ性能优化的问题应该在目的后期再去考虑Q也是在程序的轮廓已经实现了以后?</FONT></P> <P><FONT color=#0000ff size=2>. 不必要的对象构?</FONT></P> <P><FONT color=#0000ff size=2>不要在@环中构造和释放对象 </FONT></P> <P><FONT color=#0000ff size=2>. 使用 StringBuffer 对象 </FONT></P> <P><FONT color=#0000ff size=2>在处?String 的时候要量使用 StringBuffer c,StringBuffer cL构成 String cȝ基础。String cd StringBuffer cd装了hQ(以花Ҏ(gu)多时间ؓ代h(hun)Qؓ开发h员提供了一个安全的接口。当我们在构造字W串的时候,我们应该?StringBuffer 来实现大部分的工作,当工作完成后?StringBuffer 对象再{换ؓ需要的 String 对象。比如:如果有一个字W串必须不断地在其后d许多字符来完成构造,那么我们应该使用 StringBuffer 对象和她?append() Ҏ(gu)。如果我们用 String 对象代替 StringBuffer 对象的话Q会p许多不必要的创徏和释攑֯象的 CPU 旉?</FONT></P> <P><FONT color=#0000ff size=2>. 避免太多的?synchronized 关键?</FONT></P> <P><FONT color=#0000ff size=2>避免不必要的使用关键?synchronizedQ应该在必要的时候再使用她,q是一个避免死锁的好方法?/FONT></P> <P><FONT color=#0000ff size=2>                                                                                  rivershan 原创?002.11.5<BR></FONT></P><img src ="http://www.tkk7.com/adidas1981/aggbug/7132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/adidas1981/" target="_blank">浩</a> 2005-07-05 13:44 <a href="http://www.tkk7.com/adidas1981/articles/7132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP/Servlet 中的汉字~码问题(转)http://www.tkk7.com/adidas1981/articles/7115.htmlTue, 05 Jul 2005 01:39:00 GMThttp://www.tkk7.com/adidas1981/articles/7115.htmlhttp://www.tkk7.com/adidas1981/comments/7115.htmlhttp://www.tkk7.com/adidas1981/articles/7115.html#Feedback0http://www.tkk7.com/adidas1981/comments/commentRss/7115.htmlhttp://www.tkk7.com/adidas1981/services/trackbacks/7115.html
   论坛 >> ~程探讨                     阅读敎ͼ 1735
JSP/Servlet 中的汉字~码问题(转)

作者:UB    旉Q?002-06-14 10:51:10 

JSP/Servlet中的汉字编码问?1)

[作?不详d旉:?001-9-6?:12:47?gt;


?

|上MJSP/Servlet中DBCS字W编码问题有许多优秀的文章和讨论Q本文对它们作一些整理,q结合IBMWebSphereApplicationServer?.5QWASQ的解决Ҏ(gu)作一些说明,希望它不是多余的?

内容Q
问题的v源
GB2312-80QGBKQGB18030-2000汉字字W集及Encoding?
中文转码??'、ؕ码的由来?
JSP/Servlet汉字编码问题及在WAS中的解军_法?
l束?


1.问题的h?

每个国Ӟ或区域)都规定了计算Z息交换用的字W编码集Q如国的扩展ASCII?中国的GB2312-80Q日本的JIS等Q作国家/区域内信息处理的基础Q有着l一~码的重要作用。字W编码集按长度分为SBCSQ单字节字符集)QDBCSQ双字节字符集)两大cR早期的软gQ尤其是操作pȝQ,Z解决本地字符信息的计机处理Q出C各种本地化版本(L10NQ,Z区分Q引q了LANG,Codepage等概念。但是由于各个本地字W集代码范围重叠Q相互间信息交换困难QY件各个本地化版本独立l护成本较高。因此有必要本地化工作中的共性抽取出来,作一致处理,特别的本地化处理内定w低到最。这也就是所谓的国际化(I18NQ。各U语a信息被进一步规范ؓLocale信息。处理的底层字符集变成了几乎包含了所有字形的Unicode。

现在大部分h国际化特征的软g核心字符处理都是以Unicodeؓ基础的,在Y件运行时Ҏ(gu)当时的Locale/Lang/Codepage设|确定相应的本地字符~码讄Qƈ依此处理本地字符。在处理q程中需要实现Unicode和本地字符集的怺转换Q甚或以Unicodeؓ中间的两个不同本地字W集的相互{换。这U方式在|络环境下被q一步g伸,M|络两端的字W信息也需要根据字W集的设|{换成可接受的内容。

Java语a内部是用Unicode表C字W的Q遵守UnicodeV2.0。Java程序无论是?往文gpȝ以字W流?写文Ӟq是往URL连接写HTML信息,或从URL连接读取参数|都会有字W编码的转换。这样做虽然增加了编E的复杂度,Ҏ(gu)引vhQ但却是W合国际化的思想的。

从理Z来说Q这些根据字W集讄而进行的字符转换不应该生太多问题。而事实是׃应用E序的实际运行环境不同,Unicode和各个本地字符集的补充、完善,以及pȝ或应用程序实现的不规范,转码时出现的问题时时困扰着E序员和用户。

2.GB2312-80QGBKQGB18030-2000汉字字W集及Encoding?

其实解决JAVA程序中的汉字编码问题的Ҏ(gu)往往很简单,但理解其背后的原因,定位问题Q还需要了解现有的汉字~码和编码{换。

GB2312-80是在国内计机汉字信息技术发展初始阶D制定的Q其中包含了大部分常用的一、二U汉字,和9区的符受该字符集是几乎所有的中文pȝ和国际化的Y仉支持的中文字W集Q这也是最基本的中文字W集。其~码范围是高?xa1Q?xfeQ低位也是0xa1-0xfeQ汉字从?xb0a1开始,l束于0xf7feQ

GBK是GB2312-80的扩展Q是向上兼容的。它包含了20902个汉字Q其~码范围是0x8140-0xfefeQ剔除高位0x80的字位。其所有字W都可以一对一映射到Unicode?.0Q也是说JAVA实际上提供了GBK字W集的支持。这是现阶段Windows和其它一些中文操作系l的~省字符集,但ƈ不是所有的国际化Y仉支持该字W集Q感觉是他们q不完全知道GBK是怎么回事。值得注意的是它不是国家标准,而只是规范。随着GB18030-2000国标的发布,它将在不久的来完成它的历史使命。

GB18030-2000(GBK2K)在GBK的基础上进一步扩展了汉字Q增加了藏、蒙{少数民族的字Ş。GBK2K从Ҏ(gu)上解决了字位不够Q字形不的问题。它有几个特点,?

它ƈ没有定所有的字ŞQ只是规定了~码范围Q留待以后扩充。
~码是变长的Q其二字节部分与GBK兼容;四字节部分是扩充的字形、字位,其编码范围是首字节0x81-0xfe、二字节0x30-0x39、三字节?x81-0xfe、四字节0x30-0x39。
它的推广是分阶段的,首先要求实现的是能够完全映射到Unicode?.0标准的所有字形。
它是国家标准Q是强制性的?
现在q没有Q何一个操作系l或软g实现了GBK2K的支持Q这是现阶段和将来汉化的工作内容。
Unicode的介绍......免了吧。

JAVA支持的encoding中与中文~程相关的有Q?有几个在JDK文档中未列出)ASCII?-bit,同ascii7?
ISO8859-1?-bit,同?859_1,ISO-8859-1,ISO_8859-1,latin1...?
GB2312-80同gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381,?383,Cp1383,ISO2022CN,ISO2022CN_GB......?
GBK?注意大小?,同MS936?
UTF8UTF-8?
GB18030?现在只有IBMJDK1.3.?有支?,同Cp1392,1392?


JAVA语a采用Unicode处理字符.但从另一个角度来_在javaE序中也可以采用非Unicode的{码,重要的是保证E序入口和出口的汉字信息不失真。如完全采用ISO-8859-1来处理汉字也能达到正的l果。网l上行的许多解x法,都属于这U类型。ؓ了不致引h؜淆,本文不对q种Ҏ(gu)作讨论。

3.中文转码??'、ؕ码的由来?

两个方向转换都有可能得到错误的结果:?

Unicode-->Byte,如果目标代码集不存在对应的代码,则得到的l果?x3f.?
如:
"\u00d6\u00ec\u00e9\u0046\u00bb\u00f9".getBytes("GBK")的l果是"?ìéF?ù",Hex值是3fa8aca8a6463fa8b4.?
仔细看一下上面的l果Q你会发现\u00ec被{换ؓ0xa8ac,\u00e9被{换ؓ\xa8a6...它的实际有效位变长了!这是因为GB2312W号Z的一些符可映射C些公qW号~码Q由于这些符号出现在ISO-8859-1或其它一些SBCS字符集中Q故它们在Unicode中编码比较靠前,有一些其有效位只?位,和汉字的~码重叠(其实q种映射只是~码的映,在显C时仔细不是一L。Unicode中的符h单字节宽Q汉字中的符h双字节宽)?在Unicode\u00a0--\u00ff之间这LW号?0个。了解这个特征非帔R要!由此׃隄解ؓ什么JAVA~程中,汉字~码的错误结果中常常会出C些ؕ?其实是符号字W?,而不全是'?'字符,就比如上面的例子?

Byte-->Unicode,如果Byte标识的字W在源代码集不存在,则得到的l果?xfffd.?
如:
Byteba[>?{(byte)0x81,(byte)0x40,(byte)0xb0,(byte)0xa1};newString(ba,"gb2312");?
l果???,hex值是"\ufffd\u554a".?x8140是GBK字符Q按GB2312转换表没有对应的|取\ufffd.?h意:在显CuniCodeӞ因ؓ没有对应的本地字W,所以也适用上一U情况,昄Z??".)

实际~程中,JSP/Servlet程序得到错误的汉字信息Q往往是这两个q程的叠加,有时甚至是两个过E叠加后反复作用的结??

4.JSP/Servlet汉字编码问题及在WAS中的解军_法

4.1常见的encoding问题的现象
|上常出现的JSP/Servletencoding问题一般都表现在browser或应用E序端,??
览器中看到的Jsp/Servlet页面中的汉字怎么都成了?’??
览器中看到的Servlet页面中的汉字怎么都成了ؕ码??
JAVA应用程序界面中的汉字怎么都成了方块??
Jsp/Servlet页面无法显CGBK汉字。
JSP页面中内嵌?%...%>,<%=...%>{Tag包含的JAVAcode中的中文成了ؕ码,但页面的其它汉字是对的。
Jsp/Servlet不能接~form提交的汉字。
JSP/Servlet数据库d无法获得正确的内宏V?
隐藏在这些问题后面的是各U错误的字符转换和处理(除第3个外Q是因ؓJavafont设|错误引LQ。解决类似的字符encoding问题,需要了解Jsp/Servlet的q行q程Q检查可能出现问题的各个炏V

4.2JSP/Servletweb编E时的encoding问?
q行于Java应用服务器的JSP/ServletؓBrowser提供HTML内容,其过E如下图所C:?
?


其中有字W编码{换的地方?

JSP编译。Java应用服务器根据JVM的file.encodingD取JSP源文gQ编译生成JAVA源文gQ再Ҏ(gu)file.encoding值写回文件系l。如果当前系l语a支持GBKQ那么这时候不会出现encoding问题。如果是英文的系l,如LANG是en_US的Linux,AIX或SolarisQ则要将JVM的file.encoding值置成GBK。系l语a如果是GB2312Q则Ҏ(gu)需要,定要不要设|file.encodingQ将file.encoding设为GBK可以解x在的GBK字Wؕ码问题


Java需要被~译为.class才能在JVM中执行Q这个过E存在与a.同样的file.encoding问题。从q里开始servlet和jsp的q行qgQ只不过Servlet的~译不是自动q行的。对于JSPE序,对产生的JAVA中间文件的~译是自动进行的(在程序中直接调用sun.tools.javac.Mainc?.因此如果在q一步出现问题的?也要检查encoding和OS的语a环境Q或者将内嵌在JSPJAVACode中的静态汉字{为Unicode,要么静态文本输Z要放在JAVAcode中。对于Servlet,javac编译时手工指定-encoding参数就可以了。


Servlet需要将HTML页面内容{换ؓbrowser可接受的encoding内容发送出厅R依赖于各JAVAAppServer的实现方式Q有的将查询Browser的accept-charset和accept-language参数或以其它猜的方式确定encoding|有的则不。因此采用固定encoding也许是最好的解决Ҏ(gu)。对于中文网,可在JSP或Servlet中讄contentType="text/html;charset=GB2312"Q如果页面中有GBK字符Q则讄为contentType="text/html;charset=GBK"Q由于IE和Netscape对GBK的支持程度不一P作这U设|时需要测试一下?
因ؓ16位JAVAchar在网l传送时?位会被丢弃,也ؓ了确保Servlet面中的汉字Q包括内嵌的和servletq行q程中得到的Q是期望的内码,可以用PrintWriterout=res.getWriter()取代ServletOutputStreamout=res.getOutputStream().PrinterWriter将Ҏ(gu)contentType中指定的charset作{换(ContentType需在此之前指定Q?;也可以用OutputStreamWriter装ServletOutputStream类q用write(String)输出汉字字符丌Ӏ?
对于JSPQJAVAApplicationServer应当能够确保在q个阶段嵌入的汉字正确传送出厅R


q是解释URL字Wencoding问题。如果通过get/post方式从browser返回的参数g包含汉字信息Qservlet将无法得到正确的倹{SUN的J2SDK中QHttpUtils.parseName在解析参数时根本没有考虑browser的语言讄Q而是得到的值按byte方式解析。这是网上讨论得最多的encoding问题。因是设计缺P只能以bin方式重新解析得到的字符Ԍ或者以hackHttpUtils类的方式解冟뀂参考文章2均有介l,不过最好将其中的中文encodingGB2312、CP1381都改ؓGBKQ否则遇到GBK汉字时Q还是会有问题。
ServletAPI?.3提供一个新的函数HttpServeletRequest.setCharacterEncoding用于在调用request.getParameter(“param_name?前指定应用E序希望的encodingQ这有助于d解决q个问题?
4.3IBMWebsphereApplicationServer中的解x法

WebSphereApplicationServer对标准的ServletAPI?.x作了扩展,提供较好的多语言支持。运行在中文的操作系l中Q可以不作Q何设|就可以很好地处理汉字。下面的说明只是对WAS是运行在英文的系l中Q或者需要有GBK支持时有效。

上述c,d情况QWAS都要查询Browser的语言讄Q在~省状况下,zh,zh-cn等均被映射为JAVAencodingCP1381Q注意:CP1381只是等同于GB2312的一个codepageQ没有GBK支持)。这样做我想是因为无法确认Browser运行的操作pȝ是支持GB2312,还是GBKQ所以取其小。但是实际的应用pȝq是要求面中出现GBK汉字,最著名的是朱ȝ名字中的“镕"(rong2,0xe946Q\u9555)Q所以有时还是需要将Encoding/Charset指定ؓGBK。当~WAS中变更~省的encoding没有上面说的那么麻烦,针对a,bQ参考文章5Q在ApplicationServer的命o行参C指定?Dfile.encoding=GBK即可;针ԎdQ在ApplicationServer的命o行参C指定-Ddefault.client.encoding=GBK。如果指定了-Ddefault.client.encoding=GBKQ那么c情况下可以不再指定charset。

上面列出的问题中q有一个关于Tag<%...%>,<%=...%>中的JAVA代码里包含的静态文本未能正显C的问题Q在WAS中的解决Ҏ(gu)是除了设|正的file.encoding,还需要以相同Ҏ(gu)讄-Duser.language=zh?Duser.region=CN。这与JAVAlocale的设|有兟뀂

4.4数据库d时的encoding问题

JSP/Servlet编E中l常出现encoding问题的另一个地Ҏ(gu)d数据库中的数据。

行的关pL据库pȝ都支持数据库encodingQ也是说在创徏数据库时可以指定它自q字符集设|,数据库的数据以指定的~码形式存储。当应用E序讉K数据Ӟ在入口和出口处都会有encoding{换。对于中文数据Q数据库字符~码的设|应当保证数据的完整?GB2312QGBKQUTF-8等都是可选的数据库encodingQ也可以选择ISO8859-1?8-bit)Q那么应用程序在写数据之前须16Bit的一个汉字或Unicode拆分成两个?-bit的字符Q读数据之后则需两个字节合qv来,同时q要判别其中的SBCS字W。没有充分利用数据库encoding的作用Q反而增加了~程的复杂度QISO8859-1不是推荐的数据库encoding。JSP/Servlet~程Ӟ可以先用数据库管理系l提供的理功能查其中的中文数据是否正确。

然后应当注意的是d来的数据的encodingQJAVA程序中一般得到的是Unicode。写数据时则相反。

4.5定位问题时常用的技巧

定位中文encoding问题通常采用最W的也是最有效的办法——在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码Q你可以发现什么时候中文字W被转换成UnicodeQ什么时候Unicode被{回中文内码,什么时候一个中文字成了两个Unicode字W,什么时候中文字W串被{成了一串问P什么时候中文字W串的高位被截掉了……

取用合适的h字符串也有助于区分问题的cd。如Q”aa啊aa丂aa”{中q间、GB、GBK特征字符均有的字W串。一般来_英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以试着增加q箋的英文字母长度)?

5.结束语?

其实JSP/Servlet的中文encodingƈ没有惛_的那么复杂,虽然定位和解决问题没有定规,各种q行环境也各不尽Ӟ但后面的原理是一L。了解字W集的知识是解决字符问题的基。不q,随着中文字符集的变化Q不仅仅是java编E,中文信息处理中的问题q是会存在一D|间的。


...........................UB修改?002-06-14 10:52:07



RE:JAVA~程技术中汉字问题的分析及解决(?

作者:UB    旉Q?002-07-22 17:04:00    [修改]    [回复]    [删除]

JAVA~程技术中汉字问题的分析及解决
文章来源Qwww.ibm.com?
在基于Java语a的编E中Q我们经常碰到汉字的处理及显C的问题。一大堆看不懂的q肯定不是我们愿意看到的显C效果,怎样才能够让那些汉字正确昄呢?Java语a默认的编码方式是UNICODE,而我们中国h通常使用的文件和数据库都是基于GB2312或者BIG5等方式~码的,怎样才能够恰当地选择汉字~码方式q正地处理汉字的编码呢Q本文将从汉字编码的常识入手Q结合Java编E实例,分析以上两个问题q提军_们的Ҏ(gu)?

现在Java编E语a已经q泛应用于互联网世界Q早在Sun公司开发Java语a的时候,已l考虑到对非英文字W的支持了。Sun公司公布的Java运行环境(JREQ本w就分英文版和国际版Q但只有国际版才支持非英文字W。不q在Java编E语a的应用中Q对中文字符的支持ƈ非如同JavaSoft的标准规范中所宣称的那样完,因ؓ中文字符集不只一个,而且不同的操作系l对中文字符的支持也不尽相同Q所以会有许多和汉字~码处理有关的问题在我们q行应用开发中困扰着我们。有很多关于q些问题的解{,但都比较琐碎Qƈ不能够满_家迫切解决问题的愿望Q关于Java中文问题的pȝ研究q不多,本文从汉字编码常识出发,分析Java中文问题,希望对大家解册个问题有所帮助?

汉字~码的常?
我们知道Q英文字W一般是以一个字节来表示的,最常用的编码方法是ASCII。但一个字节最多只能区?56个字W,而汉字成千上万,所以现在都以双字节来表C汉字,Z能够与英文字W分开Q每个字节的最高位一定ؓ1Q这样双字节最多可以表C?4K格字W。我们经常碰到的~码方式有GB2312、BIG5、UNICODE等。关于具体编码方式的详细资料Q有兴趣的读者可以查阅相兌料。我肤浅谈一下和我们关系密切的GB2312和UNICODE。GB2312码Q中华h民共和国国家标准汉字信息交换用编码,是一个由中华人民共和国国家标准d发布的关于简化汉字的~码Q通行于中国大陆地区及新加坡,U国标码。两个字节中Q第一个字节(高字节)的gؓ区号值加32Q?0HQ,W二个字节(低字节)的gؓ位号值加32Q?0HQ,用这两个值来表示一个汉字的~码。UNICODE码是微软提出的解决多国字符问题的多字节{长~码Q它对英文字W采取前面加?”字节的{略实现{长兼容。如“A”的ASCII码?x41QUNICODE就?x00Q?x41。利用特D的工具各种~码之间可以互相转换?

Java中文问题的初步认识
我们ZJava编E语aq行应用开发时Q不可避免地要处理中文。Java编E语a默认的编码方式是UNICODEQ而我们通常使用的数据库及文仉是基于GB2312编码的Q我们经常碰到这L情况Q浏览基于JSP技术的|站看到的是qQ文件打开后看到的也是qQ被Java修改过的数据库的内容在别的场合应用时无法l正地提供信息。

StringsEnglish?“apple??
StringsChinese?“苹果??
Strings?“苹果apple??

sEnglish的长度?QsChinese的长度是4Q而s默认的长度?4。对于sEnglish来说QJava中的各个类都支持得非常好,肯定能够正确昄。但对于sChinese和s来_虽然JavaSoft声明Java的基本cdl考虑到对多国字符的支持(默认UNICODE编码)Q但是如果操作系l的默认~码不是UNICODE,而是国标码等。从Java源代码到得到正的l果Q要l过“Java源代码->Java字节码->?虚拟?>操作pȝ->昄讑֤”的q程。在上述q程中的每一步骤Q我们都必须正确地处理汉字的~码Q才能够使最l的昄l果正确。

“Java源代码->Java字节码”,标准的Java编译器javac用的字符集是pȝ默认的字W集Q比如在中文Windows操作系l上是GBK?而在Linux操作系l上是ISO-8859-1Q所以大家会发现在Linux操作系l上~译的类中源文g中的中文字符都出了问题,解决的办法就是在~译的时候添加encoding参敎ͼq样才能够与q_无关。用法是

javac–encodingGBK。

“Java字节码->虚拟?>操作pȝ”,Java运行环境QJREQ分英文版和国际版Q但只有国际版才支持非英文字W。Java开发工具包(JDKQ肯定支持多国字符Q但q所有的计算机用户都安装了JDK。很多操作系l及应用软gZ能够更好的支持Java,都内嵌了JRE的国际版本Qؓ自己支持多国字符提供了方ѝ?

“操作系l?>昄讑֤”,对于汉字来说Q操作系l必L持ƈ能够昄它。英文操作系l如果不搭配Ҏ(gu)的应用Y件的话,是肯定不能够昄中文的。

q有一个问题,是在Java编E过E中Q对中文字符q行正确的编码{换。例如,向网输Z文字W串的时候,不论你是用

out.println(string);?/string是含中文的字符串

q是用

<%=string%>Q都必须作UNICODE到GBK的转换Q或者手动,或者自动。在JSP?.0中,可以定义输出字符集,从而实现内码的自动转换。用法是

<%@pageContentType=”text/html;charset=gb2312”%>

但是在一些JSP版本中q没有提供对输出字符集的支持Q(例如JSP?.92Q,q就需要手动编码输ZQ方法非常多。最常用的方法是?

Strings1?request.getParameter(“keyword?;?
Strings2?newString(s1.getBytes(“ISO-8859-1?,”GBK?;?

getBytes方法用于将中文字符以“ISO-8859-1”编码方式{化成字节数组Q而“GBK”是目标编码方式。我们从以ISO-8859-1方式~码的数据库中读Z文字W串s1,l过上述转换q程Q在支持GBK字W集的操作系l和应用软g中就能够正确昄中文字符串s2。

Java中文问题的表层分析及处?

背景?
开发环境JDK1.15Vcafe2.0JPadPro?
服务器端NTIISSybaseSystemJconnectQJDBCQ
客户端IE5.0Pwin98?

CLASS文件存攑֜服务器端Q由客户端的览器运行APPLET,APPLET只赯入FRAME类{主E序的作用。界面包括Textfield,TextAreaQListQChoice等?

I.取中文?
用JDBC执行SELECT语句从服务器端d数据Q中文)后,数据用APPEND方法加到TextAreaQTAQQ不能正显C。但加到List中Ӟ大部分汉字却可正显C。
数据按“ISO-8859-1”~码方式转化为字节数l,再按pȝ~省~码方式(DefaultCharacterEncodingQ转化为STRING,卛_在TA和List中正确昄。
E序D如下:?

dbstr2?results.getString(1);?
//AfterreadingtheresultfromDBserverQconvertingittostring.?
dbbyte1?dbstr2.getBytes(“iso-8859-1?;?
dbstr1?newString(dbbyte1);?

在{换字W串时不采用pȝ默认~码方式Q而直接采用“GBK”或者“GB2312”,在A和B两U情况下Q从数据库取数据都没有问题。

II.写中文到数据库?
处理方式与“取中文”相逆,先将SQL语句按pȝ~省~码方式转化为字节数l,再按“ISO-8859-1”编码方式{化ؓSTRING,最后送去执行Q则中文信息可正写入数据库。

E序D如下:?
sqlstmt?tf_input.getText();?
//BeforesendingstatementtoDBserverQconvertingittosqlstatement.?
dbbyte1?sqlstmt.getBytes();?
sqlstmt?newString(dbbyte1,”iso-8859-1?;?
_stmt?_con.createStatement();?
_stmt.executeUpdate(sqlstmt);?
……

问题Q如果客h上存在CLASSPATH指向JDK的CLASSES.ZIP时Q称为A情况)Q上q程序代码可正确执行。但是如果客h只有览器,而没有JDK和CLASSPATH时Q称为B情况)Q则汉字无法正确转换。

我们的分析:?
1.l过试Q在A情况下Q程序运行时pȝ的缺省编码方式ؓGBK或者GB2312。在B情况下Q程序启动时览器的JAVA控制台中出现如下错误信息:?
Can'tfindresourceforsun.awt.windows.awtLocalization_zh_CN?
然后pȝ的缺省编码方式ؓ?859-1”。

2.如果在{换字W串时不采用pȝ~省~码方式Q而是直接采用“GBK”或“GB2312”,则在A情况下E序仍然可正常运行,在B情况下Q系l出现错误:?
UnsupportedEncodingException?

3.在客h上,把JDK的CLASSES.ZIP解压后Q放在另一个目录中QCLASSPATH只包含该目录。然后一辚w步删除该目录中的.CLASS文Ӟ另一边运行测试程序,最后发现在一千多个CLASS文件中Q只有一个是必不可少的,该文件是Qsun.io.CharToByteDoubleByte.class。

该文g拷到服务器端和其它的cL在一Pq在E序的开头IMPORT它Q在B情况下E序仍然无法正常q行。

4.在A情况下Q如果在CLASSPTH中Lsun.io.CharToByteDoubleByte.class,则程序运行时得默认~码方式为?859-1”,否则为“GBK”或“GB2312”。
如果JDK的版本?.2以上的话Q在B情况下遇到的问题得C很好的解冻I试的步骤同上,有兴的读者可以尝试一下。

Java中文问题的Ҏ(gu)分析及解?
在简体中文MSWindows?8?JDK?.3下Q可以用System.getProperties()得到Java运行环境的一些基本属性,cPoorChinese可以帮助我们得到这些属性。
cPoorChinese的源代码:?

publicclassPoorChinese{?
publicstaticvoidmain(String[>args){?
System.getProperties().list(System.out);?
}?
}?

执行javaPoorChinese后Q我们会得到:?

pȝ变量file.encoding的gؓGBK,user.language的gؓzh,user.region的gؓCN,q些pȝ变量的值决定了pȝ默认的编码方式是GBK。

在上q系l中Q下面的代码GB2312文件{换成Big5文Ӟ它们能够帮助我们理解Java中汉字~码的{??

importjava.io.*;?
importjava.util.*;?

publicclassgb2big5{?

staticintiCharNum=0;?

publicstaticvoidmain(String[>args){?
System.out.println("InputGB2312file,outputBig5file.");?
if?args.length!=2){?
System.err.println("Usage:jviewgb2big5gbfilebig5file");?
System.exit(1);?
}?
StringinputString?readInput(args[0>);?
writeOutput(inputString,args[1>);?
System.out.println("NumberofCharactersinfile:?+iCharNum+".");?
}?

staticvoidwriteOutput(Stringstr,StringstrOutFile){?
try{?
FileOutputStreamfos?newFileOutputStream(strOutFile);?
Writerout?newOutputStreamWriter(fos,?Big5");?
out.write(str);?
out.close();?
}?
catch?IOExceptione){?
e.printStackTrace();?
e.printStackTrace();?
}?
}?

staticStringreadInput(StringstrInFile){?
StringBufferbuffer?newStringBuffer();?
try{?
FileInputStreamfis?newFileInputStream(strInFile);?
InputStreamReaderisr?newInputStreamReader(fis,?GB2312");?
Readerin?newBufferedReader(isr);?
intch;?
while?(ch?in.read())?gt;?1){?
iCharNum?=?;?
buffer.append((char)ch);?
}?
in.close();?
returnbuffer.toString();?
}?
catch?IOExceptione){?
e.printStackTrace();?
returnnull;?
}?
}?
}?

~码转化的过E如下:?

ByteToCharGB2312CharToByteBig5?
GB2312------------------>Unicode------------->Big5?

执行javagb2big5gb.txtbig5.txt,如果gb.txt的内容是“今天星期三”,则得到的文gbig5.txt中的字W能够正显C;而如果gb.txt的内容是“情快乐”,则得到的文gbig5.txt中对应于“节”和“乐”的字符都是W号“?”(0x3FQ,可见sun.io.ByteToCharGB2312和sun.io.CharToByteBig5这两个基本cdƈ没有~好。

正如上例一PJava的基本cM可能存在问题。由于国际化的工作ƈ不是在国内完成的Q所以在q些基本cd布之前,没有l过严格的测试,所以对中文字符的支持ƈ不像JavaSoft所声称的那样完。前不久Q我的一位技术上的朋友发信给我说Q他l于扑ֈ了JavaServlet中文问题的Ҏ(gu)。两周以来,他一直ؓJavaServlet的中文问题所困扰Q因为每面对一个含有中文字W的字符串都必须q行强制转换才能够得到正的l果Q这好象是大家公认的唯一的解军_法)。后来,他确实不惛_此l安分下MQ因L事情实不应该是高E序员所要做的工作,他就扑ևServlet解码的源代码进行分析,因ؓ他怀疑问题就出在解码q部分。经q四个小时的奋斗Q他l于扑ֈ了问题的Ҏ(gu)所在。原来他的怀疑是正确的,Servlet的解码部分完全没有考虑双字节,直接把%XX当作一个字W。(原来JavaSoft也会犯qُ低的错误!Q
如果你对q个问题有兴或者遇C同样的烦恼的话,你可以按照他的步骤对Servlet.jar进行修改:?

扑ֈ源代码HttpUtils中的staticprivateStringparseName,在返回前sbQStringBufferQ复制成bytebs[>,然后returnnewString(bs,”GB2312?。作上述修改后就需要自p码了Q

HashTableform=HttpUtils?parseQueryString(request.getQueryString())或者
form=HttpUtils.parsePostData(…??

千万别忘了编译后攑ֈServlet.jar里面。

五、关于Java中文问题的ȝ?
Java编E语a成长于网l世界,q就要求Java对多国字符有很好的支持。Java编E语a适应了计的|络化的需求,为它能够在网l世界迅速成长奠定了坚实的基。Java的~造者QJavaSoftQ已经考虑到Java编E语a对多国字W的支持Q只是现在的解决Ҏ(gu)有很多缺陷在里面Q需要我们付怸些补偿性的措施。而世界标准化l织也在努力把hcL有的文字l一在一U编码之中,其中一U方案是ISO10646,它用四个字节来表CZ个字W。当Ӟ在这U方案未被采用之前,q是希望JavaSoft能够严格地试它的产品Qؓ用户带来更多的方ѝ

附一个用于从数据库和|络中取Z文ؕ码的处理函数Q入参是有问题的字符Ԍ出参是问题已l解决了的字W串。
StringparseChinese(Stringin)?
{?
Strings?null;?
bytetemp[>;?
if?in?=null)?
{?
System.out.println("Warn:Chinesenullfounded!");?
returnnewString("");?
}?
try?
{?
temp=in.getBytes("iso-8859-1");?
s?newString(temp);?
}?
catch(UnsupportedEncodingExceptione)?
{?
System.out.println?e.toString());?
}?
returns;?
}?
?








2005-07-05 09:39 发表评论
]]>
վ֩ģ壺 ޾Ʒҹ| ҹ| 91鶹˳ѹۿ| պƵ| Ʒmnbavվ| 97߹ѹۿ| þþùƷ| ѹۿ91Ƶ| 99Ƶѿ| Ƶѹۿ| ƵƷһ| һëƬëƬëƬ| ˿wwwѹۿ| ȫӳѹۿ߿| һĿ޿鶹 | 91߲| þø߳һëƬ| AVһַ | Ůaþþ91| ޼Ƶվ| ޹Ʒۺɫ| һ޾ƷҺ| ߿ʮ˽վ| avרۿƷ| Ļ| ŮƷþ| һHƬAƵѹۿ| ҹAëƬƵ| ƷžƷƵ| պɫպƵվ| fc2˳| ҹƵ| Ƶվ| Ƭ߹ۿѹۿȫһ| hƵѹۿ| Ʒһѿ| ˳Ƶվ| ձһߵӰ| ѱվڹۿ| Ʒһ߹ۿ | Ļվѹۿ|