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

时间:2015-03-01 16:06:30

标签: string utf-8 ipython literals diacritics

我正在使用ipython notebook。

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

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

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更改默认编码(我假设因为我有两个位置用于te重音字符而不是一个'\xc3','\xb3')到UTF-8但是这不起作用。我想得到的是:

in []: remove_accent('whatever !@# ó')
out[]: ['w',
        'h',
        'a',
        't',
        'e',
        'v',
        'e',
        'r',
        ' ',
        '!',
        '@',
        '#',
        ' ',
        'o']
PD:如果重音字符只产生一个位置而不是两个我只需要改变if条件但是我还没有办法做到这一点,那就不会那么糟糕了。

1 个答案:

答案 0 :(得分:0)

你的问题是你得到'ó'字符的两个字符而不是一个字符。因此,首先尝试将其更改为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