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.
This commit is contained in:
Guido van Rossum 2000-12-19 02:39:08 +00:00
parent cda4f9a8dc
commit 5aff7752eb

View 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):