Struts2上传文件带中文名时.图片显示会出现%乱码解决

其实这个问题以前早就解决了,但是今天做项目时又发现了一个新的问题:js中必须使用encodeURI()而不使用escape()

 

下面来说说get方式传参的解决方案吧!

 

假设

movieName='风声';

playUrl='/movie/风声/风声.rm';

url="play.jsp?movieName="+movieName+"&playUrl="+playUrl

 

若按照上述的地址直接访问,则中文会变成乱码。必须使用encodeURI('风声')进行两次编码。如下:

url="play.jsp?movieName="+encodeURI(encodeURI(movieName))+"&playUrl="+encodeURI(encodeURI(playUrl))

 

服务器通过以下方式获取值:

movieName=URLDecoder.decode(movieName,"utf-8");

playUrl=URLDecoder.decode(playUrl,"utf-8");

 

至于为什么不能使用escape()以及为什么要进行两次编码,本人不是很清楚。若有知道的,请解释一下。

对两次编码的理解:当客户端将两次编码的数据传到服务器时,服务器会先对数据进行一次解码,然后再将处理过的数据传给访问的页面,此时在jsp/servlet中获取的数据是经过一次utf-8编码的数据,这样就能通过URLDecoder.decode(,"utf-8")获取到原来的值。

 

希望知道的,能给我指点一下。

 

该方法应该是jsp的页面中实现的,如用在Struts2的标签中无效.

 <s:text name="label.fileLoad">:</s:text><img src="<s:property value="'upload/'+encodeURI(encodeURI(title))+'.'+fileExtName"/>" />
   经过处理后返回空值.

 

没时间处理.先把搜到的资料集中,下面是用js的html编码转换

 

这次作东西, 使用dojo,发送rpc的时候将正文内容使用了html编码编码的js如下:
/**
encode the str to html code formate
*/
function encodeHtml(str){
    var encodedStr = "" ;
    if (str=="") return encodedStr ;
    else {
        for (var i = 0 ; i < str.length ; i ++){
            encodedStr += "&#" + str.substring(i, i + 1).charCodeAt().toString(10) + ";" ;
        }
    }
    return encodedStr ;
}


然后, 并不想把转化后的编码文字直接保存在数据库中,师兄说这样不好看, 于是, 写了java程序将html编码转换回来,代码如下:java
    /**
     * decode html strings which are encoded by the html format: &#"(unicode number)";
     * into Chinese
     *
     * @param str
     * @return gb2312 format String
     */
    public static String decodeHtml(String str) {
        if (str.equals(""))
            return "" ;
        String ret = "";

        String[] toParse = str.split(";");
        for (String s : toParse) {
            ret += Character.toChars(Integer.parseInt(s.substring(2)))[0];
        }

        return ret;
    }

其实上面的js是将文字都使用unicode的数字偏移量然后加上&# ;组成,java的toChars正好是将指定的字符(Unicode 代码点)转换成其存储在 char 数组中的 UTF-16 表示形式。

 

 

查看了一天,发现所有的中文都会变成unicode的编码,面在文件名的对应都是中文.

也就是说在一个jsp的页面上用一个"中.jpg"的图片,经过servlet后,中文的名称变成了一个XXXXXX的编码.而在文件的保存中是中文字.必须在servlet中修改,也就是在tomcat的server.xml中修改字符编码为UTF-8或者GBK.

应影响到到其它的网站.不能修改tomcat的文件.因此做罢.

 

你可能感兴趣的:(html,tomcat,String,struts,servlet,服务器)