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的文件.因此做罢.
下面来说说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的文件.因此做罢.
相关文章推荐
- php fckeditor 上传文件(或图片)中文显示为乱码的解决方法(两种方法)
- PHP Fckeditor上传文件(或图片)中文显示为乱码的解决方法
- PHP Fckeditor上传文件(或图片)中文显示为乱码的解决方法
- Struts2-文件上传下载-解决下载中文乱码问题
- Struts2文件上传以及文件名中文乱码解决
- struts2文件上传图片中文乱码
- struts2解决文件上传下载中文乱码问题
- Struts2文件上传完美解决中文乱码问题
- asp.net 将文件 二进制 上传 保存 再显示,解决文件流中文乱码问题。
- 用FlashFXP上传文件到SSH服务器,附FlashFXP显示中文乱码的解决方法
- 用FlashFXP上传文件到SSH服务器,附FlashFXP显示中文乱码的解决方法
- fedora 15 中用vi 打开windows中创建的文件时,中文注释部分显示乱码解决办法:用vim 打开就可以
- dokuwiki + dw2pdf 插件,解决导出pdf文件中文乱码(字体问题,显示小方块)
- Struts2 .apk 文件下载及解决中文文件名乱码问题(转)
- java中ftp文件上传和中文乱码解决
- 解决,文件上传到 ftp 服务器,中文出现乱码问题
- ECSHOP编辑器Fckeditor上传图片中文名称乱码的解决方法
- java中ftp下载上传 解决中文文件上传下载中文乱码和文件上传失败下载文件为0kb
- Java_JavaEE_轻量(SSH)_Struts2资源文件在jsp页面中显示乱码解决;
- 解决FlashFXP5 不能下载中文文件名文件的问题(显示文件名中文正常下载文件名是乱码)