我在GWT中的HttpServletRequest中调用request.getParameter( "filename" )
时遇到了问题。以下是我对URL进行编码的代码:
String sFile = URL.encodeQueryString( "°^!§$%()=`´' glassfish +~#'@€-_²³.pdf" );
String sURL = GWT.getModuleBaseURL() + "filehttpservice" // name of the httpservlet
+ "?filename=" + sFile; // the name of the file to download
Window.open( sURL, "_blank", sFeatures ); // sFeatures are some window-settings
所以我想下载一个名字中带有一些特殊字符的文件。 URL编码的名称是:
%C2%B0%5E!%C2%A7%24%25()%3D%60%C2%B4'%20glassfish%20%2B~%23'%40%E2%82%AC-_%C2%B2%C2%B3.pdf
这是正确的,因为我可以直接在浏览器中使用此名称调用该文件。
因此,当请求到达HttpServlet的get-Method时,我想使用以下代码从其参数中提取文件名:
request.setCharacterEncoding( "UTF-8" );
String sFilename = request.getParameter( "filename" );
但收到的文件名是:
°^!§$%()=`´' glassfish +~#'@â¬-_²³.pdf
这是完全错误的。
我已经搜索了很长时间并尝试了几个解决方案,但它没有任何改变。有没有人知道我怎么能收到正确的文件名?
答案 0 :(得分:0)
request.setCharacterEncoding( "UTF-8" );
对doGet()
没有影响。在doGet()
中,queryString在到达doGet()
之前被容器解析。
您应该使用doPost
和request.getInputStream()
并自己解析queryString
。并且不要在request.getParameter()
之前使用request.getInputStream()
,否则它将无效。
修改强>
默认情况下,Java会在String
中对utf-16
进行编码。因此您必须将其转换为utf-8
。
response.setHeader( "Content-Disposition", new String("attachment; filename=\"" + sUrlFilename + ".pdf" + "\"".getBytes("utf-8"),"ISO-8859-1") );
答案 1 :(得分:0)
正如Anurag Anand所说,这是一个编码问题;您必须配置您的servlet容器以将URL解码为UTF-8。
以Tomcat为例,这是使用Connector
属性在URIEncoding
级别配置的。使用Jetty,可以使用org.eclipse.jetty.util.UrlEncoding.charset
系统属性设置。