有没有办法强制 ipython 解释 utf-8 符号?

Is there any way to force ipython to interpret utf-8 symbols?

我正在使用 ipython 笔记本。

我想要做的是在文字字符串中搜索任何带有西班牙重音符号的字母 (ñ,á,é,í,ó,ú,Ñ,Á,É,Í,Ó,Ú) 并将它们更改为它们的最接近英文字母表。

我决定写一个简单的函数并试一试:

def remove_accent(n):
    listn = list(n)
    for i in  range(len(listn)):
        if listn[i] == 'ó':
            listn[i] =o
        return listn  

看起来很简单,只要比较重音字符是否存在,并将其更改为最接近的表示,所以我继续测试它,得到以下输出:

in []: remove_accent('whatever !@# ó')
out[]: ['w',
        'h',
        'a',
        't',
        'e',
        'v',
        'e',
        'r',
        ' ',
        '!',
        '@',
        '#',
        ' ',
        '\xc3',
        '\xb3']

我尝试将默认编码从 ASCII(我想是因为我为重音字符设置了两个位置,而不是一个 '\xc3','\xb3')更改为 UTF-8,但这没有用。我想得到的是:

in []: remove_accent('whatever !@# ó')
out[]: ['w',
        'h',
        'a',
        't',
        'e',
        'v',
        'e',
        'r',
        ' ',
        '!',
        '@',
        '#',
        ' ',
        'o']

PD:如果重音字符只产生一个位置而不是两个,这不会太糟糕我只需要更改 if 条件,但我也没有找到一种方法来做到这一点。

您的问题是“ó”字符是两个字符,而不是一个。因此,首先尝试将其更改为unicode,使每个字符的长度相同,如下所示:

def remove_accent(n):
    n_unicode=unicode(n,"UTF-8")
    listn = list(n_unicode)
    for i in range(len(listn)):
        if listn[i] == u'ó':
            listn[i] = 'o'.encode('utf-8')
        else:
            listn[i]=listn[i].encode('utf-8')
    return listn