【问题标题】:Python 2.7 : Removal of accents from an <str> - Still won't workPython 2.7:从 <str> 中删除重音 - 仍然不起作用
【发布时间】: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


【解决方案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)发送。这与 websocket 给你的 UTF-8 不同的编码,所以结果是不同的。

【讨论】:

  • 工作,感谢您的解决方案和解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2012-06-24
  • 2019-12-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多