如何在Python中搜索和替换UTF-8特殊字符?
我是一名Python初学者,遇到了一个关于utf-8的问题。
我有一个utf-8编码的字符串,我想把所有的德语变音符号替换成ASCII字符(比如德语中的u变音符号'ü'可以写成'ue')。
u变音符号的unicode编码是252,所以我尝试了这个:
>>> str = unichr(252) + 'ber'
>>> print repr(str)
u'\xfcber'
>>> print repr(str).replace(unichr(252), 'ue')
u'\xfcber'
我希望最后的字符串能变成u'ueber'
。
我最终想做的是把文件中所有的u变音符号都替换成'ue':
import sys
import codecs
f = codecs.open(sys.argv[1],encoding='utf-8')
for line in f:
print repr(line).replace(unichr(252), 'ue')
谢谢你的帮助!(我使用的是Python 2.3。)
4 个回答
repr(str)
这个函数会返回一个带引号的字符串版本,当你把它打印出来时,可以直接用Python输入这个字符串来得到原来的内容。简单来说,它会把字符串中的字符转换成一种可以被Python理解的格式,比如它会把 ü
变成 \xfcber
,而不是直接显示 über
。
如果你想把 ü
替换成 ue
,可以直接用 str.replace(unichr(252), 'ue')
这个方法。
不过,如果你真的需要把替换后的结果也变成带引号的格式,虽然我觉得一般情况下不需要这样做,你可以把整个表达式放在 repr
里:
repr(str.replace(unichr(252), 'ue'))
我觉得直接用'ü'的unicode表示法来处理会更简单明了,而不是用unichr(252)。
>>> s = u'über'
>>> s.replace(u'ü', 'ue')
u'ueber'
其实不需要用repr,因为这会打印出字符串的“Python表示”,你只需要显示可读的字符串就可以了。
另外,如果你的.py文件开头没有这一行,你需要加上它,以告诉文件的编码方式。
#-*- coding: UTF-8 -*-
补充:当然,声明的编码方式必须和文件的实际编码一致。请检查一下,因为可能会出现一些问题(比如我在Windows上用Eclipse时就遇到过问题,因为它默认把文件写成cp1252)。而且它还应该和系统的编码一致,可能是utf-8、latin-1或其他编码。
还有,不要用str
来定义变量名,因为它是Python库的一部分。这样可能会在后面造成问题。
(我在用Python 2.6测试,我觉得在Python 2.3中结果也是一样的)
我会先定义一个特殊字符的字典(也就是我想要映射的字符),然后使用 translate
方法。
line = 'Ich möchte die Qualität des Produkts überprüfen, bevor ich es kaufe.'
special_char_map = {ord('ä'):'ae', ord('ü'):'ue', ord('ö'):'oe', ord('ß'):'ss'}
print(line.translate(special_char_map))
你会得到以下结果:
Ich moechte die Qualitaet des Produkts ueberpruefen, bevor ich es kaufe.