Now correctly using urlencode for query parameters. Also handling unicode by converting to utf-8.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index d9fd085..f00188c 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -27,6 +27,7 @@
 import re
 import simplejson
 import uritemplate
+import urllib
 import urlparse
 
 
@@ -93,10 +94,13 @@
       return (headers, path_params, query, simplejson.dumps(model))
 
   def build_query(self, params):
-    query = '?alt=json&prettyprint=true'
-    for key,value in params.iteritems():
-      query += '&%s=%s' % (key, value)
-    return query
+    params.update({'alt': 'json', 'prettyprint': 'true'})
+    astuples = []
+    for key, value in params.iteritems():
+      if getattr(value, 'encode', False) and callable(value.encode):
+        value = value.encode('utf-8')
+      astuples.append((key, value))
+    return '?' + urllib.urlencode(astuples)
 
   def response(self, resp, content):
     # Error handling is TBD, for example, do we retry