j2ee 中文 编码

Posted on 2006-04-05 18:59 英雄 阅读(377) 评论(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,会导致乱码。
 
 
 
 
 
 
 
 

 


只有注册用户登录后才能发表评论。


网站导航: