You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Unicode字符转换为近似ASCII字符?支持连字与非拉丁字符处理

Unicode转ASCII字符的进阶解决方案

我发现Python的unicodedata包可以移除拉丁字母的变音符号,比如把é转成e、ü转成u,示例代码如下:

>>> import unicodedata
>>> unicodedata.normalize('NFKD', u'éü').encode('ascii', 'ignore')
b'eu'

但这个工具存在两个明显局限:

  • 无法拆分连字,比如æ不能转为ae、œ不能转为oe
  • 无法将无点i(ı)转换为普通的i

用包含这些字符的字符串测试,结果如下:

>>> unicodedata.normalize('NFKD', u'éüœıx').encode('ascii', 'ignore')
b'eux'

现在需要找到能满足以下需求的工具或方法:

  1. 处理上述unicodedata解决不了的拉丁字符场景(连字拆分、无点i转换)
  2. 将非拉丁字符(如西里尔字母И转i、阿拉伯字母أ转a)转为相似ASCII字符,无需精准音译,只要避免空输出(比如全西里尔文本Все люди рождаются свободными用unicodedata处理后为空,需要得到有效内容)

推荐使用unidecode库

unidecode是专门做Unicode到ASCII近似转换的Python库,完全能覆盖上述需求:

  1. 先安装库:
pip install unidecode
  1. 示例代码及效果:
>>> from unidecode import unidecode
>>> # 处理拉丁字符的连字和无点i
>>> unidecode(u'éüœıx')
'eueix'
>>> # 处理西里尔字母
>>> unidecode(u'Все люди рождаются свободными')
'Vse lyudi rozhdayutsya svobodnymi'
>>> # 处理阿拉伯字母
>>> unidecode(u'أ')
'a'
>>> # 混合多种字符的情况
>>> unidecode(u'éüœıx И أ')
'eueix i a'

这个库通过预定义的映射表,把几乎所有Unicode字符转换成最接近的ASCII等价物,不管是拉丁扩展字符还是非拉丁文字,都能生成有意义的ASCII输出,完美解决unicodedata的局限性。

内容的提问来源于stack exchange,提问作者fauve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:20:27