Only decode if needed
diff --git a/googleapiclient/discovery.py b/googleapiclient/discovery.py
index 4e5787f..441dbf0 100644
--- a/googleapiclient/discovery.py
+++ b/googleapiclient/discovery.py
@@ -202,6 +202,11 @@
     raise HttpError(resp, content, uri=requested_url)
 
   try:
+    content = content.decode('utf-8')
+  except AttributeError:
+    pass
+
+  try:
     service = json.loads(content)
   except ValueError as e:
     logger.error('Failed to parse as JSON: ' + content)
diff --git a/googleapiclient/model.py b/googleapiclient/model.py
index c598154..e8afb63 100644
--- a/googleapiclient/model.py
+++ b/googleapiclient/model.py
@@ -258,7 +258,10 @@
     return json.dumps(body_value)
 
   def deserialize(self, content):
-    content = content.decode('utf-8')
+    try:
+        content = content.decode('utf-8')
+    except AttributeError:
+        pass
     body = json.loads(content)
     if self._data_wrapper and isinstance(body, dict) and 'data' in body:
       body = body['data']