您的位置:首页 > 编程语言 > Java开发

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

2009-12-13 00:01 691 查看
其实这个问题以前早就解决了,但是今天做项目时又发现了一个新的问题: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的文件.因此做罢.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐