关于python:将Unicode转换为ascii(如果可能)

Translate Unicode to ascii (if possible)

本问题已经有最佳答案,请猛点这里访问。

有一些Unicode字符可以简化为ASCII而不会丢失太多。

例子:

1
2
3
4
5
>>> unicodedata.name(u'-')
'HYPHEN-MINUS'

>>> unicodedata.name(u'?')
'MINUS SIGN'

在上面的例子中,我更喜欢"连字符-减号",因为"减号"不是ASCII码。

我可以很容易地写自己的翻译,但我不喜欢重新发明轮子。

是否没有更简单的方法将特殊的Unicode字符转换为简单的ASCII字符?

我知道这是猜测,只适用于某些Unicode字符,但在这个上下文中没关系。


这可能不是完美的答案。Unicode联盟有草案TR36来处理Unicode中的字符相似性(不仅仅是ASCII)。

您可以搜索开发人员尽最大努力映射它们的python模块。这里可以找到类似于ASCII字符和符号Unicode字符的概念证明同形符号攻击。(由于字体问题,浏览器可能会将某些字符或符号显示为方框)

您可以使用这些python可混淆的同形符号包。此处显示文档。

1
2
from confusable_homoglyphs import confusables
confusables.is_confusable.is_confusable("-")

结果

[{'homoglyphs': [{'c': '‐', 'n': 'HYPHEN'}, {'c': '?', 'n':
'NON-BREAKING HYPHEN'}, {'c': '?', 'n': 'FIGURE DASH'}, {'c': '–',
'n': 'EN DASH'}, {'c': '?', 'n': 'SMALL EM DASH'}, {'c':
'\u200e?\u200e', 'n': 'ARABIC FULL STOP'}, {'c': '?', 'n': 'HYPHEN
BULLET'}, {'c': '?', 'n': 'MODIFIER LETTER MINUS SIGN'}, {'c': '?',
'n': 'MINUS SIGN'}, {'c': '?', 'n': 'HEAVY MINUS SIGN'}, {'c': '?',
'n': 'COPTIC CAPITAL LETTER DIALECT-P NI'}], 'alias': 'COMMON',
'character': '-'}]

现在你需要决定哪一个是你最好的翻拍。如果要从库中取出一些概念,请签出源代码。


这里有一些关于Unicode字符命名不一致的有用信息:python库,用于在python中将多字节字符转换为7位ASCII这里:在Python中将多字节字符转换为7位ASCII

但要回答您的问题,似乎没有将多字节Unicode转换为ASCII的标准库。如果您还没有自己的解决方案,请参阅第二个链接。