`
jiayanjujyj
  • 浏览: 197252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

处理URL传递中文乱码问题

阅读更多

 

转自:http://www.blogjava.net/auditionlsl/archive/2009/05/26/278011.html

 

在网上搜了很多资料都没有搞定 , 一般都有以下几种说法 :

方法 1: 在后台中先获得字符串的 iso-8859-1 编码形式数组 , 再使用此数组实例一个UTF-8编码 形式 String 类型字符串.

页面提交的 url :

leavesp?work= 部门主管审批

 

后台处理 :

String inStr=request.getParameter("work ");

String outStr = new String(inStr.getBytes("iso-8859-1"),"UTF-8");

 

方法 2: 在页面传递过来时先通过 JavaScript URL 编码 , 再到后台进行解码 :

页面部分 :

<script type="text/javascript">

function dogetMethod(url)

{

        //url 编码前 : leavesp?work= 部门主管审批

 

url=encodeURI(url);

 

//url 编码后 :

leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9

 

window.open(uri,’’,’’);

}

</script>

后台部分 :( 解码 )

String inStr= request.getParameter("work ");

String outStr=java.net.URLDecoder.decode(inStr);

 

尝试过两种方法后好像都不行 , 在后台获取到的字符还是会乱码 . 试完之后真想哭 .*o*

使用第一种方法后发现 :

在请求 (request) 中获得的字符串是这样的 : ²¿ ÃÅÖ ÷¹ ÜÉ ó Å ú

使用 new String(inStr.getBytes("iso-8859-1"),"UTF-8"); 处理后字符成了 : ����������

 

没法 , 只能再试第二种方法了 , 使用后发现 :

在页面中使用 encodeURI(url) , 字符串是这样的 :

%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9

好像有希望了 !!!!

应该只要在后台再来 decoder 一下就行了吧 , 偶是这样想的 , 也是这样做的 :

在后台中 :

       String inStr= request.getParameter("work ");

outStr=java.net.URLDecoder.decode(inStr);

在请求中获得的字符串是这样的 : é ƒ¨é—¨ä¸»ç®¡å®¡æ‰¹

decoder 处理后得出的字符串为 : é ƒ¨é—¨ä¸»ç®¡å®¡æ‰¹

 

这时候真想哭啊 !!%#$%@@!@$$##

 

革命尚未成功 , 还需努力 !!!

 

从第二种方法中发现 :

在请求中获得的字符串已经乱码了 , decoder 处不处理值都是一个样 !!

明明我在页面传过来的值是已经 encode 过了的字符 , 而后来取出来却 …., 这是为什么呢 ?

 

难倒是页面编码设置得有问题 ?

看了一下页面编码是 : pageEncoding="UTF-8"

改了 ! 改成 : pageEncoding="iso-8859-1" 试试 .

浏览页面上 , 发现页面上的中文变成了很多é æ‰ 之类的字符 , 不管了 , 再试下 , 还是一样的结果 . 涛声依旧 !

 

忽然想到应该是在获得字符串之前 , 也就是在 request. getParameter("work "); 这之前的某个地方已经将 URL 进行了 decoder, 并且将获得的字符用 Iso-8859-1 的编码方式存储过了 .

 

所以在 request 中会得到这些类似于é æ‰ 之类的字符 , 这种字符应该就是中文的 iso-8859-1 的形式 !!

 

有办法了 , 既然已经获得了 iso-8859-1 编码形式的中文 , 那就只要再使用第一种方法(先获得字符串的 iso-8859-1 数组,再将它实例成 UTF-8 的字符串)来进行处理不就 OK !

 

试过之后果然 OK!!!  

 

处理中文乱码代码实现部分:

 

jsp 页面:

<%@ page language = "java" pageEncoding = "UTF-8" %>

 

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

< html >

  < head >

    < script type = "text/javascript" >

        // 开启网页对话脚本

        function openDialog(url,width,height)

        {

           var property= "status:no;center:yes;resizable:yes;scroll:yes;dialogWidth:" +width+ "px;dialogHeight:" +height+ "px;" ;  

           var ret=window.showModalDialog(url, 'modalDialogwin' ,property);

                 

           if (ret == null || ret == "" )

           {return false ; }

           return true ;

        }

       

        // 查看待办工作脚本

        function showork(url)

        { 

           // url 地址进行编码                   

           url=encodeURI(url);

           //alert(url);

           // 调用 openDialog 方法开启网页对话框

           openDialog(url,900,500)

        }

    </ script >  

    < title > 待办工作查看 </ title >

 

  </ head >

   

  < body >

  <!-- 部分代码略 -->

    < table border = "1" align = "center" >

        < tr >

           < td >

< a href = "#" onclick = "javascript:showork('leavesp?work= 部门主管审批 ') "> 查看待办工作 </ a >

</ td >    

        </ tr >             

    </ table >   

  </ body >

</ html >

 

页面部分就一个超连接,用来开启一个网页对话框,只是开启的这个对话框中请求的不是一个物理的页面,而是请求的一个 servlet leavesp ),而且 url 中带有中文参数值( ?work= 部门主管审批 )。

 

(看下一篇文章)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics