Python高效质量替换未知字符

时间:2011-06-08 14:03:20

标签: python django replace php4 non-unicode

基于PHP4 + mySQL4的项目发布到Django 1.1项目,它混合了一些字母 以这种方式取代的最佳方式(最有效)是什么? 对我来说问题是我无法获得这些字母的价值。是否有在线工具可以做到这一点?

我有各种字母的textField,我想以这种方式替换它们:

àèæëáðøûþ => ąčęėįšųūž
ÀÈÆËÁÐØÛÞ => ĄČĘĖĮŠŲŪŽ

我有类似的情况,我必须清理代码,所以我用这个:

def clean(string):
     return ''.join([c for c in string if ord(c) > 31 or ord(c) in [9, 10, 13]] )

更新:我成功提取了查看Django调试消息的Unicode值(replace_from:replace_to):

{'\xe0':'\u0105', '\xe8':'\u010d', '\xe6':'\u0119', '\xeb':'\u0117', '\xe1':'\u012f',
 '\xf0':'\u0161', '\xf8':'\u0179', '\xfb':'\u016b', '\xfe':'\u017e',
 '\xc0':'\u0104', '\xc8':'\u010c', '\xc6':'\u0118', '\xcb':'\u0116', '\xc1':'\u012e',
 '\xd0':'\u0160', '\xd8':'\u0172', '\xdb':'\u016a', '\xde':'\u017d'

所以主要问题仍然存在 - 替换

3 个答案:

答案 0 :(得分:2)

尝试str.replace()方法 - 应该使用unicode字符串。

  

str.replace(old, new[, count])

     

返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数计数,则仅替换第一次计数出现次数。

确保您的oldnew字符串的类型为Unicode (这也适用于您的输入数据)。

找出你的输入(非unicode)字符串应该被编码的内容。 例如,它可能采用latin1编码。 使用内置str.decode()方法创建数据的Unicode版本, 并将其提供给str.replace()

>>> unioldchars = oldchars.decode("latin1")
>>> newdata = data.replace(unioldchars, newchars)

答案 1 :(得分:0)

我自己做。如果您想要多个有效的替换,内置替换功能几乎没用。

看看:http://code.activestate.com/recipes/81330-single-pass-multiple-replace/

编辑:等待,您想要替换客户端,就像在文本框中一样?

答案 2 :(得分:0)

  

string.translate(s,table [,deletechars])

     

删除deletechars中s的所有字符(如果   现在),然后使用表来翻译字符,这必须是   一个256个字符的字符串,为每个字符值提供翻译,   由其序数索引。如果表为None,则只删除字符   步骤已经完成。

另见http://docs.python.org/library/string.html#string.maketrans