??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品视频大全,国产亚洲亚洲,91精品综合久久http://www.aygfsteel.com/dwys0343/category/19455.html技术整?/description>zh-cnWed, 28 Feb 2007 03:18:50 GMTWed, 28 Feb 2007 03:18:50 GMT60- Unicode字符~码分布?/title>http://www.aygfsteel.com/dwys0343/articles/98774.html特兰克斯特兰克斯Thu, 08 Feb 2007 06:47:00 GMThttp://www.aygfsteel.com/dwys0343/articles/98774.htmlhttp://www.aygfsteel.com/dwys0343/comments/98774.htmlhttp://www.aygfsteel.com/dwys0343/articles/98774.html#Feedback0http://www.aygfsteel.com/dwys0343/comments/commentRss/98774.htmlhttp://www.aygfsteel.com/dwys0343/services/trackbacks/98774.html阅读全文

]]> - java-汉字问题深入?/title>http://www.aygfsteel.com/dwys0343/articles/96586.html特兰克斯特兰克斯Mon, 29 Jan 2007 11:10:00 GMThttp://www.aygfsteel.com/dwys0343/articles/96586.htmlhttp://www.aygfsteel.com/dwys0343/comments/96586.htmlhttp://www.aygfsteel.com/dwys0343/articles/96586.html#Feedback0http://www.aygfsteel.com/dwys0343/comments/commentRss/96586.htmlhttp://www.aygfsteel.com/dwys0343/services/trackbacks/96586.html一、主题:关于java的中文问?/font>
java的中文问题比较突出,主要表现在控刉板输出,jsp面输出和数据库讉K上?
本文量避开字体问题Q而只谈编码。通过本文Q你可以了解java中文问题的由来,问题
的解x法,其中提了一下用jdbc讉K数据库的Ҏ?
二、问题描qͼ
1Q在中文w2000中文H口~译和运行,用的是国际版的jdkQ连接的是中文w2000下的cp936
~码的sql server数据库:
j:\exercise\demo\encode\helloworld>make
created by xcompiler. philosoft all rights reserved.
wed may 30 02:54:45 cst 2001
j:\exercise\demo\encode\helloworld>run
created by xrunner. philosoft all rights reserved.
wed may 30 02:51:33 cst 2001
中文
[b@7bc8b569
[b@7b08b569
[b@7860b569
中文
中文
????
中文
中文
????
??
??
??
2Q如果在中文w2000的西文窗口(~码?37Q下~译Q用javaq行则由于无字体而无法正
常显C,如果象上面一样在中文w2000的中文窗口运行,输出为:
j:\exercise\demo\encode\helloworld>run
created by xrunner. philosoft all rights reserved.
wed may 30 02:51:33 cst 2001
????
[b@7bc0b66a
[b@7b04b66a
[b@7818b66a
????
????
????
????
????
????
中文
中文
????
三)分析
1Q出现有qQ也是Q)。由于只出现Q而没出现方框,说明只是~码有问题,而不
是字体问题?在编码中Q如果从一U字W集转换到别一U字W集Q比较典型的是从gb2312
转换到iso8859_1Q即asciiQ,那么很多汉字Q半个汉字)是无法映到西文字符中去?
Q在q种情Ş下,pȝ把q些字符用?代替。同P也存在小字符集无法到大字W集?
情况Q具体原因这里就不详谈了?
2Q出C中文环境~译Q中文环境运行时汉字昄有正也有不正确的地方,同样Q在?
文环境下~译Q在中文环境下运行时也出现类似情c这是由于自动(默认Q或手工Q也
new string(bytes[,encode])和bytes getbytes([encode])Q{码的l果?
2.1Q在java源文?->javac-->class-->java-->getbytes()-->new string()-->昄的过
E中Q每一步都有编码的转换q程Q这个过EL存在的,只是有的时候用默认的参数进
行。下面我们一步一步分析ؓ什么出C面的情Ş?
2.2Q这里是源代码:
helloworld.java:
------------------------
public class helloworld
{
public static void main(string[] argv){
try{
system.out.println("中文");//1
system.out.println("中文".getbytes());//2
system.out.println("中文".getbytes("gb2312"));//3
system.out.println("中文".getbytes("iso8859_1"));//4
system.out.println(new string("中文".getbytes()));//5
system.out.println(new string("中文".getbytes(),"gb2312"));//6
system.out.println(new string("中文".getbytes(),"iso8859_1"));//7
system.out.println(new string("中文".getbytes("gb2312")));//8
system.out.println(new string("中文".getbytes("gb2312"),"gb2312"));//9
system.out.println(new
string("中文".getbytes("gb2312"),"iso8859_1"));//10
system.out.println(new string("中文".getbytes("iso8859_1")));//11
system.out.println(new
string("中文".getbytes("iso8859_1"),"gb2312"));//12
system.out.println(new
string("中文".getbytes("iso8859_1"),"iso8859_1"));//13
}
catch(exception e){
e.printstacktrace();
}
}
}
Z方便赯Q在每个转换的后面加了操作序P分别?,2,...,13?
2.3Q需要说明的是,javac是以pȝ默认~码d源文Ӟ然后按unicodeq行~码的。在
javaq行的时候,java也是采用unicode~码的,q且默认输入和输出的都是操作pȝ的默
认编码,也就是说在new string(bytes[,encode])中,pȝ认ؓ输入的是~码为encode?
字节,换句话说Q如果按encode来翻译bytes才能得到正确的结果,q个l果最后要在ja
va中保存,它还是要从这个encode转换成unicodeQ也是说有bytes-->encode字符-->uni
code字符的{换;而在string.getbytes([encode])中,pȝ要做一个unicode字符-->enco
de字符-->bytes的{换?
在这个例子中Q除那个英文H口~码的时候除外,其实情Ş下默认编码都是gbkQ在本例?
Q我们暂且把gbk和gb2312{同看待Q?
2.4Q由于在未指明在上面的两个用代码实现的{换中Q如果未指定encodeQ系l将采用?
认的~码Q这里ؓgbkQ,我们认ؓ上面?,6,7?,9,10是一LQ???1?2也是一
LQ所以我们在讨论中将只讨?,9,10,12,13。其中的2,3,4只是用于试Q不在我们的
讨论范围之内?
2.5Q下面我们来跟踪E序中的“中”字的{换历E,我们先说在中文窗口下作的~译和运
行过E,注意在下面的字母下标中,我有意识C用了一些数字,以表C相同,相异q是
相关2.5.1)我们先以上面?3个代码段中的的代?ZQ?
步骤 内容 地点 说明
01Q?c1 helloworld.java c1泛指一个gbk字符
02Q?u1 javacd u1泛指一个unicode字符
03Q?c1 getbytes()W一?java先和操作pȝ交流
04Q?b1,b2 getbytes()W二?然后q回字节数组
05Q?c1 new string()W一?java先和操作pȝ交流
06Q?u1 new string()W二?然后q回字符
07Q?c1 println(string) 能显C“中”字Q内容和原来的相?
2.5.2Q然后再以代码段10ZQ我们注意到只是Q?
步骤 内容 地点 说明
01Q?c1 helloworld.java c1泛指一个gbk字符
02Q?u1 javacd u1泛指一个unicode字符
03Q?c1 getbytes()W一?java先和操作pȝ交流
04Q?b1,b2 getbytes()W二?然后q回字节数组
05Q?c3,c4 new string()W一?java先和操作pȝ交流Q这时解析错?
06Q?u5,u6 new string()W二?然后q回字符
07Q?c3,c4 println(string) ׃中字l分成了两半Q在iso8859_1中刚好也没有字符
能映上Q所以显CZؓ??”。在上面的示例中Q?
“中文”两个字显CZؓ“?Q?Q?
2.5.3Q在完全中文模式下的其它情ŞcMQ我׃多说?
2.6Q我们接着看ؓ什么在西文dosH口下编译出来的cd中文H口下也出现cM情ŞQ特
别是Z么居然有的情形下q能正确昄汉字?
2.6.1Q我们还是先以代码段9ZQ?
步骤 内容 地点 说明
01Q?c1c2 helloworld.java c1c2分别泛指一个iso8859_1字符Q“中”字被拆开
02Q?u3u4 javacd u1u2泛指一个unicode字符
03Q?c5c6 getbytes()W一?java先和操作pȝ交流Q这时解析错?
04Q?b5b6b7b8 getbytes()W二?然后q回字节数组
05Q?c5c6 new string()W一?java先和操作pȝ交流
06Q?u3u4 new string()W二?然后q回字符
07Q?c5c6 println(string) 虽然同是两个字符Q但已不是最初的“两个iso8859_1?
W”,而是“两个bgk字符”,“中”显C成了“?Q?
而“中文”就昄成了“?Q?Q?
2.6.2Q下面我们以代码D?2ZQ因为它能正显C汉?
步骤 内容 地点 说明
01Q?c1c2 helloworld.java c1c2分别泛指一个iso8859_1字符Q“中”字被拆开
02Q?u3u4 javacd u1u2泛指一个unicode字符
03Q?c1c2 getbytes()W一?java先和操作pȝ交流Q注意还是正的哦!Q?
04Q?b5b6 getbytes()W二?然后q回字节数组Q这是很关键的一步!Q?
05Q?c12 new string()W一?java先和操作pȝ交流Q这是更关键的一步,java已经?
道b5b6要解析成一个汉字!Q?
06Q?u7 new string()W二?然后q回字符Q真是一个项两!u7包含了u3u4的信息)
07Q?c12 println(string) q就原来的“中”字Q很委屈被javac冤枉了一回,不过被程
序员拨ؕ反正了一下!当然Q“中文”两个字都能正确昄了!
3Q那Z么有的时候用jdbc?
new string(recordset.getbytes(int)[,encode])
recordset.getsting(int)
recordset.setbytes(string.getbytes([encode]))
?
recordset.setstring(string)
的时候会出现q了呢Q?
其实问题出现在~写jdbc的的也考虑了编码问题,它从数据库读取数据后Q可能自作主
张做了一个从gb2312Q默认编码)到unicode的{换,我的q个weblogic for sql server
的jdbc driver是q样的,当我d串的时候,发出d的不是正的汉字Q可恨的是我
却可以直接写汉字字串Q这让h多少有点难以接受Q?
也就是说Q我们不得不在读或写的时候进行{码,管q个转码有的时候不是那么明显,
q是因ؓ我们使用了默认的~码q行转码。jdbc driver所做的操作Q我们只有进入到源代
码内部才能清楚,不是吗?

文章整理Q西部数?-专业提供域名注册?a >虚拟L服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转蝲本文?请保留以上信息,谢谢!
]]>
վ֩ģ壺
|
|
Զ|
ֵ|
ϵ|
˳|
|
¡|
|
˱|
|
|
䴨|
÷|
|
Ϋ|
Ϫ|
|
̫ԭ|
|
|
|
|
|
|
|
|
Ӣ|
ɽ|
ϰ|
|
|
|
|
|
|
ӽ|
|
|
|
|