如何在Python中搜索和替换UTF-8特殊字符?

15 投票
4 回答
61015 浏览
提问于 2025-04-15 17:58

我是一名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 个回答

10

repr(str) 这个函数会返回一个带引号的字符串版本,当你把它打印出来时,可以直接用Python输入这个字符串来得到原来的内容。简单来说,它会把字符串中的字符转换成一种可以被Python理解的格式,比如它会把 ü 变成 \xfcber,而不是直接显示 über

如果你想把 ü 替换成 ue,可以直接用 str.replace(unichr(252), 'ue') 这个方法。

不过,如果你真的需要把替换后的结果也变成带引号的格式,虽然我觉得一般情况下不需要这样做,你可以把整个表达式放在 repr 里:

repr(str.replace(unichr(252), 'ue'))
12

我觉得直接用'ü'的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中结果也是一样的)

16

我会先定义一个特殊字符的字典(也就是我想要映射的字符),然后使用 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.

撰写回答