这才是你真正想得到的输出:
pg=q&kl=XX&stype=stext&q=%2B%22JavaI%2FO%22&search.x=38&search.y=3
例子7-9是一个QueryString类。在一个java对象中,它使用了类URLEncoder来编码连续的属性名和属性对,这个java对象被用来发送数据到服务器端的程序。
当你在创建一个QueryString对象时,你可以把查询string中的第一个属性对传递给类QueryString的构造函数,得到初始string。如果要继续加入后面的属性对,就应调用方法add(),它也能接受两个string作为参数,能对它们进行编码。方法getQuery( )返回一个属性对被逐个编码后得到的整个string。
Example 7-9. -The QueryString class
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://.CodeHighlighter.com/ --> package com.macfaq.net; import java.net.URLEncoder; import java.io.UnsupportedEncodingException; public class QueryString { private StringBuffer query = new StringBuffer(); public QueryString(String name, String value) { encode(name, value); } public synchronized void add(String name, String value) { query.append('&'); encode(name, value); } private synchronized void encode(String name, String value) { try { query.append(URLEncoder.encode(name, "UTF-8")); query.append('='); query.append(URLEncoder.encode(value, "UTF-8")); } catch (UnsupportedEncodingException ex) { throw new RuntimeException("Broken VM does not support UTF-8"); } } public String getQuery() { return query.toString(); } public String toString() { return getQuery(); } }
利用这个类,现在我们就能对前面那个例子中的string进行编码了:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://.CodeHighlighter.com/ --> QueryString qs = new QueryString("pg", "q"); qs.add("kl", "XX"); qs.add("stype", "stext"); qs.add("q", ""Java I/O""); qs.add("search.x", "38"); qs.add("search.y", "3"); String url = "http://.altavista.com/cgi-bin/query?" qs; System.out.println(url);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40100-4.html
quot