`
kenshinlk
  • 浏览: 118351 次
  • 性别: Icon_minigender_1
  • 来自: 广东.佛山.南海
社区版块
存档分类
最新评论

Escape/unescape的Java实现

阅读更多
java 代码
  1. package com.kenshin.test;   
  2. public class Escape {   
  3.     private final static String[] hex = { "00""01""02""03""04""05",   
  4.     "06""07""08""09""0A""0B""0C""0D""0E""0F""10",   
  5.     "11""12""13""14""15""16""17""18""19""1A""1B",   
  6.     "1C""1D""1E""1F""20""21""22""23""24""25""26",   
  7.     "27""28""29""2A""2B""2C""2D""2E""2F""30""31",   
  8.     "32""33""34""35""36""37""38""39""3A""3B""3C",   
  9.     "3D""3E""3F""40""41""42""43""44""45""46""47",   
  10.     "48""49""4A""4B""4C""4D""4E""4F""50""51""52",   
  11.     "53""54""55""56""57""58""59""5A""5B""5C""5D",   
  12.     "5E""5F""60""61""62""63""64""65""66""67""68",   
  13.     "69""6A""6B""6C""6D""6E""6F""70""71""72""73",   
  14.     "74""75""76""77""78""79""7A""7B""7C""7D""7E",   
  15.     "7F""80""81""82""83""84""85""86""87""88""89",   
  16.     "8A""8B""8C""8D""8E""8F""90""91""92""93""94",   
  17.     "95""96""97""98""99""9A""9B""9C""9D""9E""9F",   
  18.     "A0""A1""A2""A3""A4""A5""A6""A7""A8""A9""AA",   
  19.     "AB""AC""AD""AE""AF""B0""B1""B2""B3""B4""B5",   
  20.     "B6""B7""B8""B9""BA""BB""BC""BD""BE""BF""C0",   
  21.     "C1""C2""C3""C4""C5""C6""C7""C8""C9""CA""CB",   
  22.     "CC""CD""CE""CF""D0""D1""D2""D3""D4""D5""D6",   
  23.     "D7""D8""D9""DA""DB""DC""DD""DE""DF""E0""E1",   
  24.     "E2""E3""E4""E5""E6""E7""E8""E9""EA""EB""EC",   
  25.     "ED""EE""EF""F0""F1""F2""F3""F4""F5""F6""F7",   
  26.     "F8""F9""FA""FB""FC""FD""FE""FF" };   
  27.   
  28.     private final static byte[] val = { 0x3F0x3F0x3F0x3F0x3F0x3F,   
  29.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  30.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  31.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  32.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x000x01,   
  33.     0x020x030x040x050x060x070x080x090x3F0x3F0x3F,   
  34.     0x3F0x3F0x3F0x3F0x0A0x0B0x0C0x0D0x0E0x0F0x3F,   
  35.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  36.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  37.     0x3F0x3F0x3F0x0A0x0B0x0C0x0D0x0E0x0F0x3F0x3F,   
  38.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  39.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  40.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  41.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  42.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  43.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  44.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  45.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  46.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  47.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  48.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  49.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  50.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,   
  51.     0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F };   
  52.   
  53.     /**  
  54.      * 编码
  55.      *   
  56.      * @param s  
  57.      * @return  
  58.      */  
  59.     public static String escape(String s) {   
  60.     StringBuffer sbuf = new StringBuffer();   
  61.     int len = s.length();   
  62.     for (int i = 0; i < len; i++) {   
  63.     int ch = s.charAt(i);   
  64.     if ('A' <= ch && ch <= 'Z') {   
  65.     sbuf.append((char) ch);   
  66.     } else if ('a' <= ch && ch <= 'z') {   
  67.     sbuf.append((char) ch);   
  68.     } else if ('0' <= ch && ch< = '9') {          
  69.     sbuf.append((char) ch);   
  70.     } else if (ch == '-' || ch == '_'    
  71.     || ch == '.' || ch == '!' || ch == '~' || ch == '*'   
  72.     || ch == '\'' || ch == '(' || ch == ')') {   
  73.     sbuf.append((char) ch);   
  74.     } else if (ch <= 0x007F) {   
  75.     sbuf.append('%');   
  76.     sbuf.append(hex[ch]);   
  77.     } else {   
  78.     sbuf.append('%');   
  79.     sbuf.append('u');   
  80.     sbuf.append(hex[(ch >>> 8)]);   
  81.     sbuf.append(hex[(0x00FF & ch)]);   
  82.     }   
  83.     }   
  84.     return sbuf.toString();   
  85.     }   
  86.   
  87.     /**  
  88.      * 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
  89.      *   
  90.      * @param s  
  91.      * @return  
  92.      */  
  93.     public static String unescape(String s) {   
  94.     StringBuffer sbuf = new StringBuffer();   
  95.     int i = 0;   
  96.     int len = s.length();   
  97.     while (i < len) {   
  98.     int ch = s.charAt(i);   
  99.     if ('A' <= ch && ch <= 'Z') {   
  100.     sbuf.append((char) ch);   
  101.     } else if ('a' <= ch && ch <= 'z') {    
  102.     sbuf.append((char) ch);   
  103.     } else if ('0' <= ch && ch< = '9') {
  104. sbuf.append((char) ch);   
  105.     } else if (ch == '-' || ch == '_'|| ch == '.' || ch == '!' || ch == '~' || ch == '*'|| ch == '\'' || ch == '(' || ch == ')') {   
  106.     sbuf.append((char) ch);   
  107.     } else if (ch == '%') {   
  108.     int cint = 0;   
  109.     if ('u' != s.charAt(i + 1)) {   
  110.     cint = (cint << 4) | val[s.charAt(i + 1)];   
  111.     cint = (cint << 4) | val[s.charAt(i + 2)];   
  112.     i += 2;   
  113.     } else {   
  114.     cint = (cint << 4) | val[s.charAt(i + 2)];   
  115.     cint = (cint << 4) | val[s.charAt(i + 3)];   
  116.     cint = (cint << 4) | val[s.charAt(i + 4)];   
  117.     cint = (cint << 4) | val[s.charAt(i + 5)];   
  118.     i += 5;   
  119.     }   
  120.     sbuf.append((char) cint);   
  121.     } else {   
  122.     sbuf.append((char) ch);   
  123.     }   
  124.     i++;   
  125.     }   
  126.     return sbuf.toString();   
  127.     }   
  128.   
  129.     public static void main(String[] args) {   
  130.     String stest = "1234 abcd[]()<+>,.~\\";   
  131.     System.out.println(stest);   
  132.     System.out.println(escape(stest));   
  133.     System.out.println(unescape(escape(stest)));   
  134.     }   
  135.   
  136.     }    
分享到:
评论

相关推荐

    JavaScript escape/unescape 编码的 Java 实现

    本工具类用java实现了JavaScript escape/unescape 编码。对接建行支付以及需要向后端传输中文数据时可以使用得到

    escape/unescape 编码的Java 实现

    使用java对字符串进行unicode编码和解码。源程序

    java实现js的escape和unescape

    下面,我们将深入探讨如何在Java中实现JavaScript的`escape()`和`unescape()`方法,以及它们的具体工作原理和应用。 ### Java实现JS的`escape`和`unescape`方法 #### `escape`方法:URL编码 在JavaScript中,`...

    java版本的escape和unescape函数

    `EscapeUnescape.java`文件可能包含了演示`escape`和`unescape`功能的示例代码。通常,这样的代码会包含对字符串进行编码和解码的函数,以便开发者能更好地理解它们的工作方式和用途。在实际的开发中,这些函数可以...

    Escape.java_java_

    在Java编程语言中,字符编码和解码是处理文本数据时不可或缺的部分。`Escape.java` 源代码...实际的`Escape.java`源代码可能包含了这些概念的实现,通过阅读和理解代码,开发者可以更好地理解和控制文本数据的处理。

    Java实现JS中的escape和UNescape代码分享

    总结来说,Java虽然没有内置的 `escape` 和 `unescape` 函数,但通过自定义函数,我们可以实现与JavaScript中类似的功能。同时,对于字符编码的转换,Java提供了强大的支持,如上述的 `isoToGB` 和 `isoToUTF` 方法...

    Escape加密-UnEscape解密

    Escape加密-UnEscape解密 每一位站长必备的好工具,精而巧!

    Java文本字符编码解码操作类 Escape.java源代码.rar

    然而,`Escape.java`源代码可能是自定义实现的一个工具类,它可能包含了更加灵活或者特定场景下的编码和解码策略。 这个类可能会包含以下功能: 1. `escape()`方法:此方法用于将特殊字符转义,通常会将非字母数字...

    字符串的encode/escape

    在这篇博文中,我们将深入探讨这两个概念,以及它们在Java中的具体实现。 首先,让我们了解`encode`。字符串`encode`主要是指将字符串从一种字符编码转换为另一种字符编码的过程。常见的编码有ASCII、UTF-8、GBK等...

    base64,java与JavaScript实现

    │ ├─ java/ │ │ └─ org/ │ │ └─ crypto/ │ │ └─ controller/ │ │ └─ BASE64Controller.java │ ├─ resources/ │ │ ├─ log4j2.xml │ │ └─ context/ │ │ └─ springmvc-servlet.xml ...

    java 中文乱码 处理

    下面提供了一个简单的Java类,包括了`escape`和`unescape`两个方法。 **Escape.java** ```java public class Escape { public static String escape(String src) { int i; char j; StringBuffer tmp = new ...

    java和js相互base64编码解码

    总之,Java和JavaScript中Base64编码和解码的实现原理相似,都是将二进制数据转换为可打印的ASCII字符。Java自Java 8开始内置了Base64支持,而JavaScript则依赖于`btoa()`和`atob()`函数,或者使用第三方库。在实际...

    Java实现中文字符串与unicode互转工具类

    "Java实现中文字符串与unicode互转工具类" Java实现中文字符串与unicode互转工具类是指使用Java语言实现中文字符串与unicode码之间的相互转换。这个工具类主要用于解决中文字符串与unicode码之间的转换问题,提供了...

    JSP页面中文传递参数使用escape编码

    需要注意的是,使用escape/unescape方法进行编码和解码是JavaScript特有的,并不是Java标准库中的方法。因此,确保在JSP页面中获取到的是正确编码的字符串,且在客户端和服务器端的编码和解码方法要保持一致。 另外...

    使用FreeMarker生成java代码

    4. 转义:`&lt;#escape&gt;`和`&lt;#unescape&gt;`可以用来改变变量的输出方式,比如进行HTML转义。 接下来,创建一个FreeMarker模板文件(如`templete.ftl`),在这个文件中定义Java代码的结构和变量占位符。例如,你可以创建...

    JAVA日文字符检查

    HTML Escape与Unescape方法 #### HTMLEscape方法 - **功能**: 将特殊字符转换为HTML实体,以便安全地显示在网页上。 - `&` 转换为 `&amp;` - `转换为 `&lt;` - `&gt;` 转换为 `&gt;` - `"` 转换为 `&quot;` - `\...

    地址栏传递中文参数乱码在js里用escape转码

    乱码,乱码,头大,烦,话说设置Tomcat后可以解决,但有的时候不管用了,这时,我们可以考虑转码方式不直接传中文,在js里用escape转码,记得需要用两次,如... /** * js编转码java实现类. * * @author yangjinde */ pu

    将js escape处理后的汉字再反翻译成汉字

    将js escape处理后的汉字再反翻译成汉字,相当于js的unescape

    解决java中文乱码全集

    本文将详细讲解几种常见的解决Java中文乱码的方法,包括如何正确处理请求参数中的中文字符、如何利用`escape()`与`unescape()`方法进行字符串编码转换、JavaScript中的编码处理技巧以及J2EE环境下系统全局的字符编码...

Global site tag (gtag.js) - Google Analytics