设为首页
加入收藏
站点地图
首页 | 网站建设 | 杭州FPGA培训班,浙江FPGA培训班,苏州FPGA培训班,昆山FPGA培训班,常州FPGA培训班优化 | 网站推广 | 网络营销 | 网站运营 | 网站策划 | 在线讨论 | 下载中心
您当前的位置:WebSite -> 网站策划 -> 文章内容正文->WML页面搜索显示乱码问题解决方法
 子栏目导航
 热门文章
 相关文章
 

WML页面搜索显示乱码问题解决方法

作者:佚名  来源:转载  发布时间:2008-7-9 15:56:21  
wml在文本框中输入中文关键字搜索时,服务端获取到的值总是乱码,该如何解决?现提供一个客户端对关键字编码,服务端再解析的方法,应该可以完美的解决这一问题。

wml文件:



<?xml version="1.0" encoding="GB2312"?> 
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> 
<wml xml:lang="zh-cn"> 
<card id="card1" title="卡片1"> 
<!--提交到其他页面或服务端示例--> 
<do type="accept"> 
输入值: 
<input type="text" name="txtKey" maxlength="20"/><br/> 
<go href="hol.wmls#check()" method="post"> 
搜索 
</go> 
</do> 
</card> 
</wml>

Wmlscript文件(hol.wmls):



extern function check() 

    var x = WMLBrowser.getVar("txtKey"); 
    var xx = URL.escapeString(x); 
     
    var para = "skey=" + xx; 
    WMLBrowser.go("so.aspx?"+para); 
}

服务端aspx.cs文件内容:



private void Page_Load(object sender, System.EventArgs e) 

    // 在此处放置用户代码以初始化页面 
    string url = Request.RawUrl; 
    string key = QryStrUtil( url, "skey"); 
    key = UnEscapeString (key); 
}

另外还有两个方法:



/// <summary> 
/// 获取原始Url中的制定参数的值 
/// </summary> 
/// <param name="sRawUrl">原始Url</param> 
/// <param name="sKey">参数</param> 
/// <returns>值</returns> 
private string QryStrUtil (string sRawUrl, string sKey) 

    string sValue = string.Empty; 
    int index = sRawUrl.IndexOf('?'); 

    if (-1 != index && -1 != sRawUrl.IndexOf('=')) 
    { 
       sRawUrl = sRawUrl.Substring(index + 1,  sRawUrl.Length - index - 1); 

       string[] asParaInfo = sRawUrl.Split('&'); 
       string _key = string.Empty; 
       foreach(string sParaInfo in asParaInfo) 
       { 
           if (null == sParaInfo || string.Empty == sParaInfo) 
              continue; 

           index = sParaInfo.IndexOf("="); 
           if (-1 == index) 
              continue; 

           _key = sParaInfo.Substring(0, index); 
           if (_key == sKey) 
           { 
              sValue = sParaInfo.Substring(index + 1, sParaInfo.Length - index - 1); 
           } 
       } 
    } 
    return sValue; 

/// <summary> 
/// 汉字编码反转换 
/// </summary> 
/// <param name="s"></param> 
/// <returns></returns> 
private string UnEscapeString(string s) 

    string sub1, sub2, sub3; 
    while(-1 != s.IndexOf('%')) 
    { 
       sub1 = s.Substring(0, s.IndexOf('%')); 
       sub2 = s.Substring(sub1.Length,6); 
       sub3 = s.Remove(0, sub1.Length + sub2.Length); 

       sub2 = sub2.Remove(0,1); 

       string[] scode = sub2.Split('%'); 
       Byte[] bCodes = new byte[scode.Length]; 
       for(int i=0; i<scode.Length; i++) 
       { 
           int sh,sl,val; 
           string code = scode[i]; 
           sh = Convert.ToInt32(code.Substring(0,1),16); 
           sl = Convert.ToInt32(code.Substring(1,1),16); 

           val = sh * 16 + sl; 
           bCodes[i] = Convert.ToByte(val.ToString(),10); 
       } 
       sub2 = Encoding.GetEncoding("gb2312").GetString(bCodes); 
       s = sub1 + sub2 + sub3; 
    } 
    return s; 
}

至此,该方法以全部完毕,Page_Load中得到的key就是原输入字符串的原形。在这里提供EscapeString方法。


/// <summary>  
/// 汉字编码转换(该方法还不完美,会对字母及数字等编码) 
/// </summary> 
/// <param name="s"></param> 
/// <returns></returns> 
public string EscapeString(string s) 

    string res = string.Empty; 
    Byte[] bCodes = Encoding.GetEncoding("gb2312").GetBytes(s); 
    ASCIIEncoding ascii = new ASCIIEncoding(); 
    for(int i=0;i<bCodes.Length ;i++) 
    { 
       int val = bCodes[i]; 
       val = (val < 0) ? val+256 : val; 
       int sh,sl; 
       sh = val/16; 
       sl = val%16; 

       res += "%"; 
       res += Convert.ToString(sh,16); 
       res += Convert.ToString(sl,16); 
    } 
    return res; 
}

细心的读者会发现,如果用EscapeString编码,再用UnEscapeString来解码,可能会错误。所以这里,仅对全角及中文字符编码即可。不过这里暂时不需要同时用到这两个方法,在此把这个方法加上,仅是对wmlscript的escapeString方法的原理进行一下说明。 

注:该方法的wmlscript解释是。这个函数计算生成s t r i n g的一个新版本。在这个版本中, [ R F C 1 7 3 8 ]规定的特殊字符(非安全字符、保留字符和不可打印字符)被一个十六进制的转义序列取代,给定的字符串可以这样转义;这个函数可以不进行U R L分析。根据[ R F C 1 7 8 3 ]的规定,对于U n i c o d e字符集中编码等于或者小于0 x F F的特殊字符,使用双数字格式的转义序列% x x

 [返回上一页] [打 印] [收 藏]
百度中查看“WML页面搜索显示乱码问题解决方法”相关文章

版权申明:本站网站策划资源来源网络,如有侵犯您的版权,请来Q告知 我们会在24小时内删除!

Copyright © 2008-2010 www.mepeixun.com All Rights Reserved
服务QQ:52466268 邮箱:meipeixun@163.com
备案号:苏ICP备07200130号