Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 有没有办法强迫ipython解释utf-8符号?_String_Utf 8_Ipython_Literals_Diacritics - Fatal编程技术网

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

String 有没有办法强迫ipython解释utf-8符号?,string,utf-8,ipython,literals,diacritics,String,Utf 8,Ipython,Literals,Diacritics,我在用ipython笔记本 我要做的是在文本字符串中搜索任何西班牙语重音字母ñ,á,é,í,ó,ú,ñ,Á,Í,Ó,Ú,并将它们更改为英语字母表中最接近的表示形式 我决定写一个简单的函数并试一试: def remove_accent(n): listn = list(n) for i in range(len(listn)): if listn[i] == 'ó': listn[i] =o return listn

我在用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更改为te重音字符的两个位置,而不是一个“\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

虽然现在的输出是水平向量而不是垂直向量,但这并不重要,但为什么会发生这种情况呢?它让我好奇超过一定长度,IPython将垂直显示列表,而不是水平显示。它完全是同一种物体,只是显示器在变化。是的,你说得对。我从来没有注意过它,我选择的弦恰好处于垂直和水平表示的边缘