【发布时间】:2015-03-25 08:45:05
【问题描述】:
我正在通过 websocket 连接接收 str 数据,并尝试删除重音符号(以及降低文本/将 ' ' 变成 '-' ..)
而我,即使在这里提出和回答了数百个问题,仍然失败。
这是尝试执行此操作的代码部分,parsed[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
【问题讨论】:
-
问题可能在
parsed[4][7:].lower().decode('unicode-escape') -
@njzk2 parsed[4] 是一个字符串对象,物理上是聊天室中的消息。 parsed[:6] 被检查为 !strat,如果验证,则 parsed[7:] 应该是一个单词。它的设计目的是让用户询问“!strat Ténéfix”。也许来自 websockets 的字符串不是字符串?..
-
您没有检查导致问题的值的实际内容吗?
-
我无法在代码中放置调试打印。由于未知原因,使用 websocket 连接似乎使任何打印命令无效。启动这个程序后,我可以简单地在控制台中请求“print 1”,他不会打印任何东西._。这就是为什么我正在尝试逐步测试,这似乎有效......因此让我更加困扰。
标签: python string python-2.7 unicode utf-8