如果列表中的字符串失败并带有变音符号

2024-05-16 05:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

因为我是法国人,我试着做一个小函数,可以在一个国家名称之前加上好的定冠词。除了少数几个以变音符号开头的国家外,我没有问题。我的代码是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def article(nomPays):
    voyelles = ['A','E','É','I','O','U','Y']
    if nomPays == 'Mexique':
        return 'du'
    elif nomPays[0] in voyelles:
        return 'de l\''
    elif nomPays[-1] == 'e':#signe négatif pour compter à partir de la dernière lettre
        return 'de la'
    else:
        return 'du'

print article('Érythrée')

如果我输入Allemagne而不是赤道,那么行为是正确的:它返回'del'。但是èrythreée返回'de la'。这意味着我的函数无法识别voyelles列表中的字符É。在

我能解释为什么有人能解决这个问题?在


Tags: 函数名称returnarticle符号de国家la
3条回答

在^{之前添加u

voyelles = [u'A',u'E',u'É',u'I',u'O',u'U',u'Y']
...
print article(u'Érythrée')

示例:

^{pr2}$

问题是在python2中使用str,其中str是一个字节序列,因此{}将给出字符串的第一个字节,而不是第一个字符。在单字节编码中,这不是一个问题,但是对于像UTF-8这样的多字节编码,“赤道”的第一个字节是一个前导字节,而不是整个字符“а”。在

您需要更改为使用unicode来获取第一个字符:

firstChar = unicode(nomPays, 'UTF-8')[0].encode('UTF-8')

实际上,使用startswith可能更容易:

^{pr2}$

或者,您可以在整个应用程序中使用unicode,或者切换到python3,在那里所有这些都处理得更好。在

它是字节字符串,而不是unicode字符串,因此字符串的第一个元素是:

>>> 'Érythrée'[0]
'\xc3'

这是因为UT8编码。在

相关问题 更多 >