8

我想编写以下代码:

import string
frm = b'acdefhnoprstuw'
to  = 'אקדיפהנופרסתאו'
trans_table = string.maketrans(frm, to)
hebrew_phrase = 'fear cuts deeper than swords'.translate(trans_table)

上面的代码不起作用,因为to参数 tostring.maketrans(frm, to)必须是字节序列,而不是字符串。问题是字节序列只能包含 ASCII 文字字符。因此,我无法进行将英语字符串翻译成希伯来语字符串的转换。原因是它会string.maketrans()返回一个字节对象。

有没有一种优雅的方式来为我的任务使用string.maketrans()andtranslate()函数(或与 unicode 一起工作的等效函数)?

4

1 回答 1

13

您需要使用 str.maketrans(),它以两个 str 作为参数。

>>> frm = 'acdefhnoprstuw'
>>> to = 'אקדיפהנופרסתאו'
>>> trans_table = str.maketrans(frm, to)
>>> hebrew_phrase = 'fear cuts deeper than swords'.translate(trans_table)
>>> hebrew_phrase
'פיאר קאתס דייפיר תהאנ סוורדס'

String.maketrans 在 Python 3.1 中仍然存在,但这只是因为他们错过了将其移至 3.0 中的 bytes.maketrans() 。它已经在 3.1 中被弃用,在 3.2 中它已经消失了。

于 2012-04-26T10:02:39.860 回答