]> granicus.if.org Git - python/commitdiff
Make string.translate(s, table) work for Unicode s. Two things are
authorGuido van Rossum <guido@python.org>
Tue, 19 Dec 2000 02:39:08 +0000 (02:39 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 19 Dec 2000 02:39:08 +0000 (02:39 +0000)
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.

Lib/string.py

index bf2811c6b49bdc9000d43f6623a566a0d16f9a16..0dffb2afd3bad5352d625147dfaec6012bd5d502 100644 (file)
@@ -297,15 +297,22 @@ def expandtabs(s, tabsize=8):
 
 # 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):