如何在Python中找到字符串中的重音字符?

时间:2012-11-10 20:22:30

标签: python string unicode

我有一个带句子的文件,其中一些是西班牙语,包含重音字母(例如é)或特殊字符(例如¿)。我必须能够在句子中搜索这些字符,以便确定句子是西班牙语还是英语。

我已经尽力做到这一点,但是没有运气好。以下是我尝试过的解决方案之一,但显然给出了错误的答案。

sentence = ¿Qué tipo es el? #in str format, received from standard open file method
sentence = sentence.decode('latin-1')
print 'é'.decode('latin-1') in sentence
>>> False

我也尝试使用codecs.open(..,..,'latin-1')来读取文件,但这没有帮助。然后我尝试了u'é'.encode('latin-1'),但这不起作用。

我在这里没有想法,有什么建议吗?

@icktoofay提供了解决方案。我最后保留了文件的解码(使用latin-1),然后使用Python unicode作为字符(u'é')。这要求我在脚本的顶部设置Python unicode编码。最后一步是使用unicodedata.normalize方法对两个字符串进行规范化,然后进行相应的比较。谢谢你们的快速和大力支持。

2 个答案:

答案 0 :(得分:5)

在检查之前对字符串使用unicodedata.normalize

解释

Unicode提供多种形式来创建一些字符。例如,á可以用单个字符á或两个字符表示:a,然后“将´置于其上”。规范化字符串将强制它到一个或另一个表示。 (它规范化的表示取决于您作为form参数传递的内容)

答案 1 :(得分:0)

我怀疑您的终端使用的是UTF-8,因此'é'.decode('latin-1')不正确。只需使用Unicode常量u'é'

要在脚本中正确处理Unicode,请声明脚本和数据文件编码,并解码传入数据,并对传出数据进行编码。在脚本中使用Unicode字符串作为文本。

示例(以UTF-8保存脚本):

# coding: utf8
import codecs
with codecs.open('input.txt',encoding='latin-1') as f:
    sentence = f.readline()
if u'é' in sentence:
    print u'Found é'

请注意print隐式编码终端编码中的输出。