首页 > 编程知识 正文

javaurlencode转码,python url解码

时间:2023-05-03 13:08:44 阅读:40174 作者:4711

今天给网址的时候乱码了。 首先,url可以是searchText=中文,后台new string (search text.getbytes (iso-8859-1 )、' gbk ' ),在jsp中是gbk的代码,

max threads=' 250 ' maxhttpheadersize=' 8192 '

emptysessionpath=' true ' protocol=' http/1.1 '

enable lookups=' false ' redirect port=' 8443 ' accept count=' 100 '

连接时间输出=' 20000 ' disableuploadtimeout=' true ' uri encoding=' utf-8 ' /

以前没有uriencoding这个属性,我帮你杀了它,问题就解决了。 此时使用的是默认值ISO-8859-1。

有关server.xml的配置,请参阅此url的文档

在解决问题的过程中,我特意研究了两个类: urlencode和urldecode。 之所以没有使用这个方案,是因为在获取页面上的连接时使用了开源的名为Cloud的类。

如果使用开机自检方法提交网页表单,则数据内容类型为application/x-www-form-urlencoded,该类型为1 .字符' a'-'z ',' a'-'z 3 .将非文本内容转换为“%xy”的形式。 xy是2位16进制数值; 4 .在每个name=value对之间放置符号。

编码过程非常简单,除非是ASCII码中的数字、字符或前面提到的标点符号,否则所有字符都将转换为字节格式,每个字节都用这种格式编写。 “%”后面跟两位十六进制数字。 空间是特别的情况。 因为太普通了。 它不仅可以编码为“”,还可以编码为“”。 加号()本身编码为。 当/#=和? 作为名称的一部分使用时,必须进行编码,而不是作为URL部分之间的分隔符使用。

类URL不会自动执行编码或解码。 您可以生成可以包含非法ASCII字符、非ASCII字符和%xx的URL对象。 方法使用getPath (和toExternalForm )作为输出方法时,不会自动编码或解码此字符和传输。 负责用于生成URL对象的字符串对象,以便正确编码所有字符。

名为urlencode的类负责将String编码为平台上的通用格式,urldecode类可以将URL转换为String格式。

以下是urlencode的演示。

publicstaticvoidmain (字符串[ ] args ) {

try {

system.out.println (urlencoder.encode (' thisstringhasspaces ',' UTF-8 ' ) );

system.out.println (urlencoder.encode ) (this*string*has*asterisks )、() UTF-8 ) )

system.out.println (urlencoder.encode (' this % string % has % percent % signs )、' UTF-8 ) )

system.out.println (urlencoder.encode (' thisstringhaspluses ',' UTF-8 ' );

system.out.println (urlencoder.encode ) (this/string/Has/slashes )、(UTF-8 ) );

system.out.println (urlencoder.encode (' this' string' has' quote' marks ',' UTF-8 ' ) )

system.out.println (urlencoder.encode (this : string : has : colons ),) UTF-8 ) )

system.out.println (urlencoder.encode ) (this~string~has~tildes )、(UTF-8 ) );

system.out.println (urlencoder.encode ) (this(string ) has (parentheses ),) UTF-8 ) )

system.out.println (urlencoder.encode (' this.string.has.periods ',' UTF-8 ' ) );

system.out.println (urlencoder.encode (' this=string=has=equals=signs ',' UTF-8 ' ) )

system.out.println (urlencoder.encode (' th

is&string&has&ersands","UTF-8"));

System.out.println(URLEncoder.encode("Thiséstringéhasé non-ASCII characters","UTF-8"));

System.out.println(URLEncoder.encode("this中华人民共和国","UTF-8"));

} catch (UnsupportedEncodingException ex) {throw new RuntimeException("Broken VM does not support UTF-8");

}

}

执行结果如下:

This+string+has+spaces

This*string*has*asterisks

This%25string%25has%25percent%25signs

This%2Bstring%2Bhas%2Bpluses

This%2Fstring%2Fhas%2Fslashes

This%22string%22has%22quote%22marks

This%3Astring%3Ahas%3Acolons

This%7Estring%7Ehas%7Etildes

This%28string%29has%28parentheses%29

This.string.has.periods

This%3Dstring%3Dhas%3Dequals%3Dsigns

This%26string%26has%26ersands

This%C3%A9string%C3%A9has%C3%A9+non-ASCII+characters

this%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD

很明显url中有/%&=这类字符也会被编码,对于我们来说是不对的。例如

public static void main(String[] args) {

try {

System.out.println(URLEncoder.encode("pg=q&kl=XX&stype=stext&q=+"Java+I/O"&search.x=38&search.y=3","UTF-8"));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

这个结果就是不对的了,会有如下输出:

pg%3Dq%26kl%3DXX%26stype%3Dstext%26q%3D%2B%22Java%2BI%2FO%22%26search.x%3D38%26search.y%3D3

所以这种情形我们要对每一部分做分段encode

pg=q&kl=XX&stype=stext&q=%2B%22Java+I%2FO%22&search.x=38&search.y=3

对于urldecoder类来说

它们解码以x-www-form-url-encoded这种形式编码的string。也就是说,它们把所有的加号(+)转换成空格符,把所有的%xx分别转换成与之相对应的字符

直接上demo:

public static void main(String[] args) {

String input = "http://www.altavista.com/cgi-bin/" + "query?pg=q&kl=XX&stype=stext&q=%2B%22Java+I%2FO%22&search.x=38&search.y=3";

String output;

try {

output = URLDecoder.decode(input, "UTF-8");

System.out.println(output);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

输入的结果如下:

http://www.altavista.com/cgi-bin/query?pg=q&kl=XX&stype=stext&q=+"Java I/O"&search.x=38&search.y=3

更多的可以参考这个文章:

总结一下,今天发生的中文乱码的问题最终的解决方案可能和urlencode和urldecode没有多大关系,这里有时间还要熟悉一下jboss的server.xml的配置文件。urlencode主要有encode方法,用来把url中非数字和字母的字符转换成%加两位16进制。urldecode主要有decode方法,用来把一个含有%加两位16进制的url转换成正常的编码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。