>> st 'Piperazine (perphenazine, \xef\xac\x-6ren">
gpt4 book ai didi

python - 氟奋乃静读作\xef\xac\x82uphenazine

转载 作者:太空狗 更新时间:2023-10-30 00:49:16 30 4
gpt4 key购买 nike

当我写作时

>>> st = "Piperazine (perphenazine, fluphenazine)"

>>> st

'Piperazine (perphenazine, \xef\xac\x82uphenazine)'

发生了什么事?为什么它不对任何 fl 执行此操作?我该如何避免这种情况?

看起来\xef\xac\x82 实际上不是 fl。有什么方法可以将这个字符“翻译”成 fl(正如作者所希望的那样),而不仅仅是通过类似

的方式排除它
 unicode(st, errors='ignore').encode('ascii') 

最佳答案

这就是所谓的“连字”。

在打印中,f 和 l 字符之间的间距与正常的连续字母对不同——事实上,f 和 l 会合并为一个字符。其他连字包括“th”、“oe”和“st”。

这就是您在输入中得到的 - “fl”连字字符,UTF-8 编码。这是一个三字节序列。我会对你断言它“不是,事实上 fl” 的小问题 - 它确实是,但你的输入是 UTF-8 而不是 ASCII :-)。我猜您是从 Word 文档或电子书或专为演示而不是数据保真度设计的东西(或者,从内容来看,它是 LaTeX 生成的 PDF?)粘贴的。

如果您想处理这种特殊情况,您可以用 ASCII 字母“fl”替换该字节序列。如果您想处理所有此类 情况,则必须使用 Unicode Consortium 的“UNIDATA”文件:http://www.unicode.org/Public/UNIDATA/UnicodeData.txt .在该文件中,有一列用于字符的“分解”。 f-l 连字的标识符为“LATIN SMALL LIGATURE FL”。顺便说一下,这个数据文件的 Python 模块位于 https://docs.python.org/2/library/unicodedata.html。 .你想要“分解”功能:

>>> import unicodedata
>>> foo = u"fluphenazine"
>>> unicodedata.decomposition(foo[0])
'<compat> 0066 006C'

0066 006C 当然是 ASCII“f”和“l”。

请注意,如果您尝试将 UTF-8 数据向下转换为 ASCII,您最终会遇到糟糕的一天。只有 127 个 ASCII 字符,而 UTF-8 有数百万个代码点。 UTF-8 中有许多代码点无法以非复杂的方式轻松表示为 ASCII - 谁希望某些文本最终显示为“<TREBLE CLEF> <SNOWMAN> <AIRPLANE> <YELLOW SMILEY FACE>”?

关于python - 氟奋乃静读作\xef\xac\x82uphenazine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31553324/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com