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

Python如何仅转换带重音英文字符为无重音形式、保留其他语言字符

实现方案

核心思路是逐字符处理,仅对ASCII范围内的拉丁字母去除重音,其余所有字符原样保留:

  1. 对单个字符做NFD标准化,拆分出基础字符和重音组合标记
  2. 判断基础字符是否为ASCII范围内的英文字母,是则保留基础字符(自动丢弃重音标记),否则保留原字符
  3. 最后统一转为大写即可

可直接运行的代码

import unicodedata

def acc(input_str):
    result = []
    for char in input_str:
        # 拆分单字符的基础字符和重音标记
        nfd_char = unicodedata.normalize('NFD', char)
        base_char = nfd_char[0]
        # 仅对ASCII英文字母去除重音
        if base_char.isascii() and base_char.isalpha():
            result.append(base_char)
        else:
            result.append(char)
    return ''.join(result).upper()

# 测试用例
print(acc("as平仮平ÇÈÈ.a@yah.comÈ"))
# 输出:AS平仮平CEE.A@YAH.COME

注:如果使用Python 3.7以下版本,将base_char.isascii()替换为ord(base_char) < 128即可正常运行。

原方案错误原因

  • 用encode('ascii', 'ignore')的方案会直接丢弃所有非ASCII字符,包括中日韩等其他语言文字
  • unidecode库的逻辑是对所有Unicode字符做拉丁转写,会把非拉丁文字转为对应发音的英文字符,不符合保留原字符的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:01