疑问

  1. 空格变成了+?
  2. -*.不能转换url编码?

解惑

  1. URL 编码通常使用加号(+)或 %20 替代空格。
    如果要转换为%20,可以先进行转换编码,再替换 +%20
    **注意:**在JavaScript中,空格被编码成%20
     //解决urlecode空格问题String message = "我是空  格";System.out.println(URLEncoder.encode(message, "UTF-8").replace("+","%20"));System.out.println(URLDecoder.decode(URLEncoder.encode(message, "UTF-8"), "UTF-8"));

  1. 同样将 -*. 替换成响应的URL编码
// . -> %2E
// * -> %2A
// - -> %2D
URLEncoder.encode(message, "UTF-8").replace(".","%2E").replace("*","%2A").replace("-","%2D")

只转变汉字

public class URLtoUTF8 {//转换为url编码public static String toUtf8String(String s) {StringBuffer sb = new StringBuffer();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c >= 0 && c <= 255) {sb.append(c);} else {byte[] b;try {b = String.valueOf(c).getBytes("utf-8");} catch (Exception ex) {System.out.println(ex);b = new byte[0];}for (int j = 0; j < b.length; j++) {int k = b[j];if (k < 0)k += 256;sb.append("%" + Integer.toHexString(k).toUpperCase());}}}return sb.toString();}//将url编码转换为汉字 public static String unescape(String s) {StringBuffer sbuf = new StringBuffer();int l = s.length();int ch = -1;int b, sumb = 0;for (int i = 0, more = -1; i < l; i++) {/* Get next byte b from URL segment s */switch (ch = s.charAt(i)) {case '%':ch = s.charAt(++i);int hb = (Character.isDigit((char) ch) ? ch - '0': 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;ch = s.charAt(++i);int lb = (Character.isDigit((char) ch) ? ch - '0': 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;b = (hb << 4) | lb;break;case '+':b = ' ';break;default:b = ch;}/* Decode byte b as UTF-8, sumb collects incomplete chars */if ((b & 0xc0) == 0x80) { // 10xxxxxx (continuation byte)   sumb = (sumb << 6) | (b & 0x3f); // Add 6 bits to sumb   if (--more == 0)sbuf.append((char) sumb); // Add char to sbuf   } else if ((b & 0x80) == 0x00) { // 0xxxxxxx (yields 7 bits)   sbuf.append((char) b); // Store in sbuf   } else if ((b & 0xe0) == 0xc0) { // 110xxxxx (yields 5 bits)   sumb = b & 0x1f;more = 1; // Expect 1 more byte   } else if ((b & 0xf0) == 0xe0) { // 1110xxxx (yields 4 bits)   sumb = b & 0x0f;more = 2; // Expect 2 more bytes   } else if ((b & 0xf8) == 0xf0) { // 11110xxx (yields 3 bits)   sumb = b & 0x07;more = 3; // Expect 3 more bytes   } else if ((b & 0xfc) == 0xf8) { // 111110xx (yields 2 bits)   sumb = b & 0x03;more = 4; // Expect 4 more bytes   } else /*if ((b & 0xfe) == 0xfc)*/{ // 1111110x (yields 1 bit)   sumb = b & 0x01;more = 5; // Expect 5 more bytes   }/* We don't test if the UTF-8 encoding is well-formed */}return sbuf.toString();}public static void main(String[] args){System.out.println(URLtoUTF8.toUtf8String("你"));System.out.println(URLtoUTF8.unescape("%E4%BD%A0%20%E5%A5%BD"));}
}

参考

HTML URL 编码参考手册

java的URLEncoder.encode() 疑问与解惑相关推荐

  1. 关于java.net.URLEncoder.encode编码问题

    Q:java.net.URLEncoder.encode里的编码和什么有关的? A:使用urlencoder编码会将中文变成你在浏览器地址栏看到的%XX形式,至于选择哪种enc编码跟你jvm的defa ...

  2. 中文乱码在java中URLEncoder.encode方法要调用两次解决

    2019独角兽企业重金招聘Python工程师标准>>> 因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParamete ...

  3. java.net.urlencoder_使用java.net.URLEncoder.encode()可以对要传递的中文进行编码

    使用java.net.URLEncoder.encode()可以对要传递的中文进行编码 a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);取值时用语 ...

  4. java:URLEncoder.encode只转码中文

    原文:Java只给汉字转URLEncoder 转码起因:线上图片显示异常,因为IOS无法显示带中文的图片链接,在之前的文章中介绍了通过转码进行正常显示,后面发现原来的那个转码有问题,不单单是对中文进行 ...

  5. java encode 空格_javaWeb中URLEncoder.encode空格问题

    近期开发一个在线坐席的功能.发现推送的消息中空格变成了+ .查询发现URLEncoder.encode的问题.曾经用的时候也没注意过,解决的方法网上是对URLEncoder.encode的之后的字符串 ...

  6. 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次

    一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8");           ...

  7. java URLEncoder.encode 对应 js解码

    //java 代码 String p = "骉赑焺燚"; p = URLEncoder.encode(p,"utf-8");//js var p = decod ...

  8. Java之URLEncoder和URLDecoder类使用小记

    网页中的表单使用POST方法提交时,数据内容是application/x-www-form-urlencoded类型. 从普通字符串到编码到application/x-www-form-urlenco ...

  9. URLEncoder.encode问题

    遇到java里的URLEncoder.encode方法编码后与javascript的encodeURIComponent方法的结果有点不一样,找了一下资料,原来URLEncoder实现的是HTML形式 ...

最新文章

  1. css元素与浏览器边框,别具光芒CSS属性、浏览器兼容与网页布局
  2. html绘图环境,HTML_HTML5 在canvas中绘制文本附效果图,一、绘制文本 在绘图环境中提 - phpStudy...
  3. div赋值,取值和input赋值,取值
  4. nginx根据参数转发到不同服务器_Nginx服务器之负载均衡策略
  5. jQuery--思维导图
  6. drawpolygon收尾不连接_门窗施工全流程,80%的设计师都不了解!
  7. 被阿里带火的数据中台,不靠这三个阶段绝对失败
  8. 用户界面和逻辑应该分离
  9. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块
  10. Jupyter Tool
  11. python批量命名文件_用python实现批量重命名文件的代码
  12. 好程序员Web前端分享一些小知识!
  13. 七问个税改革:工薪阶层为何感觉税负重
  14. 什么是上变频和下变频
  15. 苹果3D物体捕捉Object Capture功能实现教程
  16. C语言课程设计——宾馆管理系统
  17. Oracle如何实现列转行
  18. 模拟cmos集成电路(8)
  19. 深度学习实战教程(1)--手机跑目标检测(YOLO,从DarkNet到Caffe再到NCNN完整打通)
  20. 你觉得java与嵌入式学哪个好?

热门文章

  1. CakePHP 中文手册
  2. H5CS3酷炫登录注册静态页面
  3. self-trainning, co-trainning
  4. Samba配置文件解析
  5. centos7更改管理员密码
  6. xshell终端中文乱码解决
  7. Python与机器视觉(x)图像差分-图像相减
  8. 数组的升序 java
  9. 草稿-xpath了解-python 操作xpath小例子
  10. 在spring boot中三分钟上手apache顶级分布式链路追踪系统skywalking