这个问题不是一个完整的独立示例;我不能确定它是 Python 2 还是 3,maketrans来自哪里等等。我很有可能会猜错,这就是为什么你应该确保适当地标记你的问题并提供一个简短、自包含、正确的例子. (那个,还有很多其他人——他们中的一些人可能比我聪明——可能忽略了你的问题,因为它是模棱两可的。)
假设您使用的是 2.x,并且您已经完成了from string import *getmaketrans并且json["name"]是 unicode 而不是 str/bytes,这就是您的问题:
有两种翻译表:旧式 8 位表(只是 256 个字符的数组)和新式稀疏表(只是将一个字符的序数映射到另一个字符的 dict)。该str.translate函数可以使用其中任何一个,但unicode.translate只能使用第二个(如果您仔细考虑一下,原因应该很明显)。
该string.maketrans函数制作旧式 8 位转换表。所以你不能将它与unicode.translate.
您始终可以编写自己的“makeunitrans”函数作为替代,如下所示:
def makeunitrans(frm, to):
return {ord(f):ord(t) for (f,t) in zip(frm, to)}
但是如果你只是想映射出某些字符,你可以做一些更特殊的事情:
def makeunitrans(frm):
return {ord(f):ord(' ') for f in frm}
但是,从您的最终评论来看,我translate什至不确定您想要什么:
我想将字符串格式化为“türlich türlich sicher dicker”
如果你做对了,你将把字符串格式化为“türlich türlich sicher dicker”,因为你将所有这些标点符号映射到空格,而不是什么都没有。
使用新型翻译表,您可以将任何您想要的内容映射到无,从而解决了这个问题。但是您可能想退后一步,问为什么您translate首先使用该方法,而不是例如多次调用replace(人们通常说“为了性能”,但您不会在线构建翻译表每次如果这是一个问题)或使用一个简单的正则表达式。