我通过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
答案 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给你的,所以结果是不同的。