encode():  Handle Latin-1 input characters better.
diff --git a/Doc/tools/sgmlconv/esistools.py b/Doc/tools/sgmlconv/esistools.py
index 893af76..7feeada 100644
--- a/Doc/tools/sgmlconv/esistools.py
+++ b/Doc/tools/sgmlconv/esistools.py
@@ -35,15 +35,19 @@
 
 
 _charmap = {}
-for c in map(chr, range(256)):
-    _charmap[c] = c
+for c in range(128):
+    _charmap[chr(c)] = chr(c)
+    _charmap[unichr(c + 128)] = chr(c + 128)
 _charmap["\n"] = r"\n"
 _charmap["\\"] = r"\\"
 del c
 
 _null_join = ''.join
 def encode(s):
-    return _null_join(map(_charmap.get, s))
+    try:
+        return _null_join(map(_charmap.get, s))
+    except TypeError:
+        raise Exception("could not encode %r: %r" % (s, map(_charmap.get, s)))
 
 
 class ESISReader(xml.sax.xmlreader.XMLReader):