Make string.translate(s, table) work for Unicode s.  Two things are
required to work around restrictions on the arguments of
u.translate():

1) don't pass the deletions argument if it's empty;

2) convert table to Unicode if s is Unicode.

This fixes SF bug #124060.
diff --git a/Lib/string.py b/Lib/string.py
index bf2811c..0dffb2a 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -297,15 +297,22 @@
 
 # Character translation through look-up table.
 def translate(s, table, deletions=""):
-    """translate(s,table [,deletechars]) -> string
+    """translate(s,table [,deletions]) -> string
 
     Return a copy of the string s, where all characters occurring
-    in the optional argument deletechars are removed, and the
+    in the optional argument deletions are removed, and the
     remaining characters have been mapped through the given
-    translation table, which must be a string of length 256.
+    translation table, which must be a string of length 256.  The
+    deletions argument is not allowed for Unicode strings.
 
     """
-    return s.translate(table, deletions)
+    if deletions:
+        return s.translate(table, deletions)
+    else:
+        # Add s[:0] so that if s is Unicode and table is an 8-bit string,
+        # table is converted to Unicode.  This means that table *cannot*
+        # be a dictionary -- for that feature, use u.translate() directly.
+        return s.translate(table + s[:0])
 
 # Capitalize a string, e.g. "aBc  dEf" -> "Abc  def".
 def capitalize(s):