Python 2.7:从<str>中删除重音 - 仍然没有工作</str>

时间:2015-01-26 20:53:59

标签: python string python-2.7 unicode utf-8

我通过websocket连接接收str数据,并尝试删除重音(以及降低文本/将''转换为' - '..)

而且,即使有数百个问题在这里被问及回答,但仍然失败了。

这是尝试执行此操作的代码的一部分,解析[4] [7:]作为我要翻译的文本

    if parsed[4][:6]=="!strat":
        shiftedtxt=''
        txt=parsed[4][7:].lower().decode('unicode-escape')
        hope=''.join((c for c in unicodedata.normalize('NFD', txt) if unicodedata.category(c) != 'Mn'))
        for i in hope:
            if i==' ':
                shiftedtxt+='-'
            else:
                shiftedtxt+=i
        ws.send(room+"|http://pokestrat.com/fiche_pokemon/"+shiftedtxt+".php")

我通常会尝试将'Ténéfix'翻译成'tenefix'。

正如本网站上的答案所示,我正在使用

''.join((c for c in unicodedata.normalize('NFD', txt) if unicodedata.category(c) != 'Mn'))

方法

逐步尝试时:

'éô'.decode('unicode-escape')

产量

u'\xe9\xf4'

>>> s=u'\xe9\xf4'
>>> ''.join((c for c in unicodedata.normalize('NFD', s) if     unicodedata.category(c) != 'Mn'))

产量

u'eo'

因此,事情应该......有效吗?但他们没有。 例如,'ténéfix'返回'tA©nA©fix',我无法解释。 为什么?

编辑:这是完整的代码:http://pastebin.com/aJ1Rk1pV

1 个答案:

答案 0 :(得分:1)

txt=parsed[4][7:].lower().decode('unicode-escape')

您确定要将部分提交的文本解析为Python unicode字符串文字吗?这似乎不太可能。 !strat Ténéfix不包含任何Python字符串转义符(例如\uNNNN\n等)。

通过tA©nA©fix判断您正在接收UTF-8编码的字节,但是您将它们解码为ISO-8859-1,这是unicode-escape的直通编码。相反,尝试:

txt=parsed[4][7:].decode('utf-8').lower()

将字节序列转换为Unicode文本后,需要进行小写。

  

逐步尝试时:'éô'.decode('unicode-escape')会产生u'\xe9\xf4'

为此,您的终端必须将字符éô作为ISO-8859-1(或类似的Windows代码页1252)发送。这是与UTF-8不同的编码,这是websocket给你的,所以结果是不同的。