首 页WAP教程WAP源码WAP电子书客户留言龙腾电脑维修网158网络电视本站论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:WAP开发网 -> WAP教程 -> JSP开发WAP教程 -> 文章内容 退出登录 用户管理
栏目导航
· ASP WAP开发教程 · ASP.net WAP开发教程
· PHP WAP开发教程 · WML教程
· JSP开发WAP教程 · WAP 2.0
· 综合杂谈
热门文章
· WAP 2.0教程
· WML语言基础(WAP建站...
· 用VS2005实现ASP.NE...
· [组图] php WAp开发教程
· WML语言基础(WAP建站...
· VS.NET 2003开发移动...
· [图文] ASP技术进行动态WAP...
· [图文] WML语言基础(WAP建站...
· asp.net移动控件开发...
· [图文] 创建移动Web应用程序...
相关文章
· JSP开发WAP技术
· jsp开发wap的注意事...
· JSP wap经典教程、实...
· JSP制作WAP网站时中...
· JSP快速入门
· wap 重定向 jsp
· jsp处理wap中文乱码...
· JSP在WAP网页中的应...
· 解决JSP中wap乱码问...
· jsp开发wap应用
jsp制作wap网站时中文字符问题
作者:不详  来源:本站整理  发布时间:2006-10-21 3:47:52  发布人:tangyunfei

减小字体 增大字体


我奉命花了将近3个月的时间来做一个wap网站,使用的是jsp,然后操作无非是一些

从数据库中读出东西,然后动态生成wml,然后显示在手机上。和在手机上录入一些东西

然后保存到数据库中。做的过程中,我深深地体会到了java和wml对中文字符集支持的差

劲。当然,3个月时间也没有学到什么东西。我把自己总结的一些制作过程中碰到的中文

字符问题和解决方法拿出来,希望对以后碰到那些讨厌问题的同志有点帮助。

 

  最开始我是在模拟手机上开发的,就是那个up的浏览器,对wmls支持的比较差劲。

因为我的手机是西门子的35系列。所以主要用的是up的模拟手机。如果碰到wml语法错误

的话,我就把nokia的那个toolkit打开。那东西老费我内存。不过两个结合起来用,感觉

是可以解决不少问题。

 

  wap服务器我用的是tomcat,准确的说应该是web服务器。那东西对中文支持好想也

不怎么地,不过好象是我没有好好研究它的配置。resin其实挺爽的,中文支持好,编译

速度快。不过我也没有好好研究他的配置,搞得我每次改了jsp页面有时可以刷新,有时

不能刷新,一气之下,我又换tomcat了。

 

呵呵~~言归正传吧。现在说一下从数据库中读出中文字符后在wml夜面中的显示。

 

  windows中文版的操作系统使用汉字编码为gbk(关于怎样查找操作系统使用的字符

编码,您可以使用这段代码:摘自ibm developerworks<java编程技术中汉字问题的分

析及解决>http://www.cn.ibm.com/developerworks/java/java_chinese/index.shtml

 

public class poorchinese {

  public static void main(string[] args) {

    system.getproperties().list(system.out);

  }

}

 

  而wml(1.1版本)支持的字符集只有3种,大部分手机使用的字符集直接就是utf-8,

于是您需要在显示汉字的时候将数据库中的gb2312(它和gbk是兼容的)的东西动态地

转化成utf-8的东西。这两种字符集的转换很容易实现。算法就是对字符串中的每个

字符找到它的内码(hex格式的x****),然后在头的地方放个"&#",在尾的地方放个";"

 

  这里有段现成的代码,您可以直接使用:

 

 public static string toutf(string inpara){

 &n 
 bsp;char temchr;

  int ascchr;

  int i;

  string rtstr=new string("");

  if(inpara==null){

   inpara="";

  }

  for(i=0;i<inpara.length();i++){

   temchr=inpara.charat(i);

   ascchr=temchr+0;

   system.out.println(ascchr);

   system.out.println(integer.tobinarystring(ascchr));

   rtstr=rtstr+"&#x"+integer.tohexstring(ascchr)+";";

  }

  return rtstr;

 }

 

 呵呵~~,刚学java的时候写的,高手看的话就见笑了。没有什么注释,相信您肯定

看得懂。后面我把整个处理字符转换的类给您付上吧。从中您会可以看到我寻找汉字



编码时的一些苯办法。

 
前面的内容中描述了一些汉字显示的一些东东。需要提醒您一下的是关于

web服务器对中文字符集支持的问题。就拿tomcat和resin来进行讨论,对于刚

才的那个函数进行这样的调用:

 

  <%out.println(wap.gb.toutf("对不起,您的服务内容尚未回复!"));% >

 

  如果您的web是tomcat的话(就以我的环境为例吧,我的环境没有对tomcat

进行努力的配置),您还是无法正常显示这些中文,无论是在模拟手机还是真的

手机您都应该看到的是???那些乱七八遭的东西。在resin中好多了,显示是正常

的。但是如果这样:

 

  <%out.println(wap.gb.toutf(reply));%>

 

  其中那个reply是我从数据库中读出来的中文字符串所在的变量。两个服务

器显示都是正常的。我相信这是服务器中关于字符集设置的问题。tomcat也不会

那么臭吧。

 



  <%out.println(wap.gb.toutf4("对不起 

  ,您的服务内容尚未回复!"));%>

 

  后来是这句话解决了在tomcat我的环境中静态显示中文字符问题的,那个

toutf4是先把静态的中文字符串变成gb2312的编码,然后再通过toutf来显示的

咱们在下面那篇中继续吧.
好了,汉字字符显示基本上就对了。当然那是指在resin中。咱们先说使用模拟

手机在resin环境中向数据库中插记录时中文字符问题吧。

 

    其实呢?模拟手机表面上实现了真手机的模拟,但是它毕竟是模拟啊,我找到

起码两处它跟真的手机是有差别的。1。还是汉字编码问题。我以前一直傻傻的以为只要

在模拟手机中测试通过了,真的手机应该没有问题,结果就是因为汉字编码的不同把我

弄得都产生了放弃这个活的念头。2。up的模拟手机可以支持编译后2000字节的wml文件

但是真的手机西门子3568i无法支持那么长。不晓得整么回事。

 

    这里还是要先使用模拟手机,希望您能体会它的用处。更好地搞定汉字编码转

换。模拟手机中使用的汉字编码好象是跟操作系统相同gbk编码(在中文视窗中),在使用

模拟手机的时候它要向jsp页面post一些东西的时候,可以在up模拟手机另外一个窗口看

到那些汉字的编码,就是夹在两个%之间的那些。用下面的代码可以将它转换为可以正常

在数据库中显示的汉字。~~呵呵~~这部分是我最想不明白的。希望哪位大侠指点一下。

 

  public static string togb2312(string inpara){

  system.out.println("原来的字符串为:"+inpara);

  if(inpara == null){

   inpara = "";

  }

  try{

   char[] temp = inpara.tochararray();

   byte[] b = new byte[temp.length];

   system.out.println("分成char[]后字符串的为:"+temp);

   system.out.println("传递字符串的长度为:"+temp.length);

   int tempint;

   for(int i = 0;i < temp.length;i++){

    b[i] = (byte)temp[i];

 &nbs

p;  tempint = (int)b[i];

    system.out.println("第"+i+"个字符的编码为:" + tempint + "\t二进制码

为:"+integer.tobinarystring(tempint));

   }

   string deststring = new string(b,"gb2312");

   system.out.println(deststring);

   return deststring;

  }catch(java.io.unsupportedencodingexception e){

   return "不支持的字符编码";}

 } 

    希望您看到我瘰疬罗嗦的代码不要心烦。主要的没有多少。jsp中汉字在数据库

中保存的问题是很常见的。这里虽然是wml,但是跟html是一模一样的问题。真的手机中

使用utf-8编码,情况就不一样了。明天继续。

--
#if !defined(afx_stdafx_h__f3ec7113_c1dc_4bc4_94de_7fabe77ddfb2__included_)
#define afx_stdafx_h__f3ec7113_c1dc_4bc4_94de_7fabe77ddfb2__included_

[] [返回上一页] [打 印] [收 藏]
上一篇文章:JSP开发WAP技术
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2005 wapkf.com. All Rights Reserved .
浙ICP备06013604号|站长QQ:274273595