URLEncoder.encode (Java API for URLEncoder)
When you encode a string using the URLEncoder.encode method following rules apply
- The alphanumeric characters "a" through "z", "A" through "Z" and "0" through "9" remain the same.
- The special characters ".", "-", "*", and "_" remain the same.
- The space character "+".
- All other characters are unsafe and are first converted into      one or more bytes using some encoding scheme. Then each byte is      represented by the 3-character string      "%xy", where xy is the two-digit hexadecimal representation of the byte. The recommended encoding scheme to use is UTF-8. However, for compatibility reasons, if an encoding is not specified, then the default encoding of the platform is used.
from the above rules, java URLEncoder.encode will treat [-a-zA-Z0-9._*-] as litterals .
JavaScript encodeURIComponent
JavaScript's encodeURLComponenet [-a-zA-Z0-9._*~'()!] as litterals . and space will converts as "%20".
Following is implementation of javascript compatiable encoding in java
public static String encodeURIComponent(String originalStr){
    String encodeString= null;
    try{
      encodeString = URLEncoder.encode(s, "UTF-8")                          .replaceAll("\\+", "%20")
                         .replaceAll("\\%21", "!")
                         .replaceAll("\\%27", "'")
                         .replaceAll("\\%28", "(")
                         .replaceAll("\\%29", ")")
                         .replaceAll("\\%7E", "~");
    }catch (UnsupportedEncodingException e)    {
      System.out.println("Exception while encoding");
    }
    return encodeString;  } 
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public static String encodeURIComponent(String originalStr){
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        engine.eval("print(encodeURIComponent(originalStr))");
}
 
 
Solution that worked for me based on last code snippet:
ReplyDeleteimport javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
*
* @author atharva
*/
public class Testing {
public static void main(String[] args) throws ScriptException {
String text = "My name is Atharva. I am = human";
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Object eval = engine.eval("encodeURIComponent(\"" + text + "\")");
text = eval.toString();
System.out.println("URI Component encoded text: " + text);
}
}