关于java.net.URLEncoder.encode方法的编码字符集的问题

明月镇魂 2019-01-15 02:33:32
java.net.URLEncoder中的

public static String encode(String s, String enc)方法,其中的enc(字符编码名称)是如何确定使用那种字符集?
在根据相关字符集编码后,传送到IE,IE如何知道使用哪种字符集进行解码?
...全文
522 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
明月镇魂 2019-01-16
  • 打赏
  • 举报
回复
引用 1 楼 小涴熊 的回复:
由客户端传入服务的字符通过java.net.URLEncoder.encode(s, enc)编码后,由服务端传到客户端需要用java.net.URLDecoder.decode(s, enc)解码,js也有类似解码的方法。中文一般用utf-8,另外还有gbk、gb2312,用哪种编码,就要用哪种解码,浏览器并不能自动解码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String filename = request.getParameter("filename");
String filename1=null;
if(filename.equals("a.txt"))
{
filename="数据库密码.txt";
filename1= URLEncoder.encode(filename, "UTF-8");
filename1 = filename1.replace("+", " ");
}
response.setContentType(this.getServletContext().getMimeType(filename));
response.setHeader("Content-Disposition", "attachment;filename="+filename1);
System.out.println(filename1);
String realPath = this.getServletContext().getRealPath("DownLoad/"+filename);
FileInputStream in = new FileInputStream(realPath);
ServletOutputStream out = response.getOutputStream();
int len;
byte[] arr = new byte[1024];
while((len= in.read(arr))>0)
{
out.write(arr, 0, len);
}
in.close();
}


其中filename1已经被编码成%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%86%E7%A0%81.txt,传送到浏览器后,浏览器也能解码出该txt的名称是数据库密码.txt,这不算能自动解码么?

明月镇魂 2019-01-16
  • 打赏
  • 举报
回复
引用 1 楼 小涴熊 的回复:
由客户端传入服务的字符通过java.net.URLEncoder.encode(s, enc)编码后,由服务端传到客户端需要用java.net.URLDecoder.decode(s, enc)解码,js也有类似解码的方法。中文一般用utf-8,另外还有gbk、gb2312,用哪种编码,就要用哪种解码,浏览器并不能自动解码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String filename = request.getParameter("filename");
String filename1=null;
if(filename.equals("a.txt"))
{
filename="数据库密码.txt";
filename1= URLEncoder.encode(filename, "UTF-8");
filename1 = filename1.replace("+", " ");
}
response.setContentType(this.getServletContext().getMimeType(filename));
response.setHeader("Content-Disposition", "attachment;filename="+filename1);
System.out.println(filename1);
String realPath = this.getServletContext().getRealPath("DownLoad/"+filename);
FileInputStream in = new FileInputStream(realPath);
ServletOutputStream out = response.getOutputStream();
int len;
byte[] arr = new byte[1024];
while((len= in.read(arr))>0)
{
out.write(arr, 0, len);
}
in.close();
}


其中filename1已经被编码成%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%86%E7%A0%81.txt,传送到浏览器后,浏览器也能解码出该txt的名称是数据库密码.txt,这不算能自动解码么?
Bestest~ 2019-01-15
  • 打赏
  • 举报
回复
情景一: 后端返回字符串直接显示到前端页面: java.net.URLEncoder.encode("中文字符", "UTF-8")); 情景二: 前端传递到后端中文: encodeURI(encodeURI("中文字符")); 后端获取传来的字符: String p= URLDecoder.decode("中文字符","UTF-8"); 为什么会出现这种问题,个人觉得应该是提交方式的问题,get方式提交中文时需要用这种加码解码的传递方式。window.open()方法默认的提交方式就是get。希望对你有帮助。
AM18 2019-01-15
  • 打赏
  • 举报
回复
由客户端传入服务的字符通过java.net.URLEncoder.encode(s, enc)编码后,由服务端传到客户端需要用java.net.URLDecoder.decode(s, enc)解码,js也有类似解码的方法。中文一般用utf-8,另外还有gbk、gb2312,用哪种编码,就要用哪种解码,浏览器并不能自动解码

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧