Java URI class: constructor determines whether or not query is encoded? -


is behavior intentional?

//create same uri using 2 different constructors  uri foo = null, bar = null; try {      //constructor: uri(uri string)     foo = new uri("http://localhost/index.php?token=4%2f4ezdssbg_4vx6d5pzvdsmldoyitb"); } catch (urisyntaxexception e) {}  try {      //constructor: uri(scheme, authority, path, query, fragment)      bar = new uri("http", "localhost", "/index.php", "token=4%2f4ezdssbg_4vx6d5pzvdsmldoyitb", null); } catch (urisyntaxexception e) {}  //the output: //foo.getquery() = token=4/4ezdssbg_4vx6d5pzvdsmldoyitb //bar.getquery() = token=4%2f4ezdssbg_4vx6d5pzvdsmldoyitb 

the uri(string uri) constructor seems decoding query part of uri. thought query portion supposed encoded? , why doesn't other constructor decode query part?

from uri javadoc:

the single-argument constructor requires illegal characters in argument quoted , preserves escaped octets , other characters present.

the multi-argument constructors quote illegal characters required components in appear. percent character ('%') quoted these constructors. other characters preserved.

thus uri(string) expects encode correctly , assumes %2f such encoded octed decoded /.

the other constructors endcode % character (resulting in %252f input %2f) , after decoding still %2f.

i assume purpose of deviation between constructors allow things new uri(otheruri.tostring()) tostring() returning encoded uri.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -