[Patch 101634]
xml.sax: Fix parse and parseString not to rely on ExpatParser
         Greatly simplify import logic by using __import__
saxutils: Support Unicode strings and files as parameters to
          prepare_input_source
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py
index 8f8f42e..3f130f3 100644
--- a/Lib/xml/sax/saxutils.py
+++ b/Lib/xml/sax/saxutils.py
@@ -3,10 +3,12 @@
 convenience of application and driver writers.
 """
 
-import os, urlparse, urllib
+import os, urlparse, urllib, types
 import handler
 import xmlreader
 
+_StringTypes = [types.StringType, types.UnicodeType]
+
 def escape(data, entities={}):
     """Escape &, <, and > in a string of data.
 
@@ -189,8 +191,12 @@
     """This function takes an InputSource and an optional base URL and
     returns a fully resolved InputSource object ready for reading."""
     
-    if type(source) == type(""):
+    if type(source) in _StringTypes:
         source = xmlreader.InputSource(source)
+    elif hasattr(source, "read"):
+        f = source
+        source = xmlreader.InputSource(source)
+        source.setByteStream(f)
 
     if source.getByteStream() == None:
         sysid = source.getSystemId()