Posted on 2006-04-05 18:59
英雄 阅读(378)
评论(0) 编辑 收藏 所属分类:
java积累
1.编码
ASCII码:128个码位。
iso8859-1:又称为Latin-1 256个码位。
从计算机的应用开始,我国已经颁布了多种中文信息编码标准,
常用的是GB2312-1980,GB12345,GB13000(GBK),以及最新标准GB18030。向下兼容。
值得一提的是,最新的GB18030标准将要作为强制标准实行,所有不支持GB18030标准的软件将不能作 为 产品出售。
gb2312:[1~2个字节]
汉字:第一个字节的值在0xB0到0xF7之间,第二个字节的值在0xA0到0xFE之间。
gb12345,gb13000:[1~2个字节]
汉字:大致为第一个字节的值在0x81到0xFE之间,第二个字节的值在0x40到0xFE之间。
gb18030:[1~4个字节]
单字节,其值从0到0x7F
双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F)
四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节的值从0x81到0xFE,第四个字节的值从0x30到0x39。
unicode:
UCS-2:[统一2个字节][现在用的unicode]65536个码位。
UCS-4:[统一4个字节]以防将来不够用的2的31次方个 码位。
codepage:
各国编码和unicode的对应表
UTF编码:
UTF是“UCS Transformation Format”的缩写。UTF-8 编码字符理论上可以最多到 6 个字节长,可以编入 所有可能的2的31次方个 UCS 代码,是变字节编码。
以上编码统一兼容ascii.
2.j2ee中文问题解决
构架情景:
前台显示通过jsp,html;中间java的filter,servelt处理请求;后台:java通过jdbc driver同数据库交互。
基础:
1]java运行总是以unicode为内存中存在形式。如:string s="中文";s在运行时内存是unicode编码。
2]数据库有一个存储编码集。表示了采用存储的形式。如:表中记录一个字段值为"中文",在数据库中以该编码集编码存在。
3]html有一个网页编码,可以通过meta指定。
流程:
1)浏览器获得的html总是来源于3个方面:
1,java直接输出response,reponse.setContenttype指定编码
2,jsp<content type指定编码
3, html<meta指定编码
前两种在指定时都同时把生成的html数据按指定编码编码传过来了[把内存unicode转成对应编码]。
后1种的实际编码要看实际存储的时候如何存储的。
这样浏览器按指定编码把获得的html解码显示出来。
2)浏览器发送数据时
url根据ie设置可以总是以rtf-8发送,表单数据默认采用网页编码发送,当然也可以指定。
3)java接受数据后首先把url按iso-8859-1解析,得到request参数。然后可以通过在request.setEncod~来按指定编码解析表单数据[编码的unicode转化],否则默认按iso-8859-1解析。
4)java访问数据库通过jdbc driver。jdbc driver负责完成unicode和db默认编码的转化。
问题列举:
如果传递的html含有中文,而编码默认指定为iso-8859-1,出现乱码
如果url中含有中文以rtf-8发送,java不处理会出现问题。
如果浏览器发送的form数据含有中文,而没有通过对应编码解析request,得到的参数会出现问题。
如果jdbc driver出现bug,比如mysql,会导致乱码。