我有以下代码:
import string
def translate_non_alphanumerics(to_translate, translate_to='_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
translate_table = string.maketrans(not_letters_or_digits,
translate_to
*len(not_letters_or_digits))
return to_translate.translate(translate_table)
对于非unicode字符串非常有用:
>>> translate_non_alphanumerics('<foo>!')
'_foo__'
但unicode字符串失败:
>>> translate_non_alphanumerics(u'<foo>!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in translate_non_alphanumerics
TypeError: character mapping must return integer, None or unicode
对于str.translate()方法,Python 2.6.2 docs中关于“Unicode对象”的段落我没有任何意义。
如何使它适用于Unicode字符串?
我想出了以下我的原始函数和Mike版本的组合,它可以使用Unicode和ASCII字符串:
更新:“强制”
translate_to
为unicode的unicodetranslate_table
。谢谢迈克。Unicode版本的translate需要从Unicode序数(可以用^{} 检索单个字符)到Unicode序数的映射。如果要删除字符,则映射到
None
。我更改了您的函数以构建一个dict,将每个字符的序号映射到要转换为的序号:
编辑:结果是转换映射必须从Unicode序号(通过
ord
)映射到另一个Unicode序号、Unicode字符串或无(要删除)。因此,我将translate_to
的默认值更改为Unicode文本。例如:在这个版本中,你可以相对地把一个人的信写给另一个人
相关问题 更多 >
编程相关推荐