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

Swift如何将字符串中的重音字符替换为标准ASCII字符?

在Swift中去除字符串重音字符并转换为标准ASCII

你可以通过字符串折叠的方式,将带重音的字符转换为对应的标准ASCII字符,以下是两种实用的实现方式:

方式一:扩展String实现复用

通过给String添加扩展方法,方便在项目中随时调用:

extension String {
    func strippedOfAccents() -> String {
        // 去除重音标记
        let folded = self.folding(options: .diacriticInsensitive, locale: .current)
        // 可选:过滤所有非ASCII字母、数字和空格的字符(按需使用)
        return folded.replacingOccurrences(of: "[^a-zA-Z0-9 ]", with: "", options: .regularExpression)
    }
}

用法示例

let original1 = "cartões"
let converted1 = original1.strippedOfAccents()
print(converted1) // 输出:cartoes

let original2 = "notificações"
let converted2 = original2.strippedOfAccents()
print(converted2) // 输出:notificacoes

方式二:直接使用NSString桥接方法

Swift的String可以直接桥接为NSString,利用其自带的折叠方法实现:

let inputStr = "notificações"
let asciiStr = (inputStr as NSString).stringByFoldingWithOptions(
    [.diacriticInsensitive, .widthInsensitive],
    locale: NSLocale.current
)
print(asciiStr) // 输出:notificacoes

原理说明

  • .diacriticInsensitive选项会忽略字符的重音标记,将带重音的字符映射为对应的无重音ASCII字符,比如õ转为o、ç转为c。
  • 如果不需要过滤非ASCII的特殊字符,可以去掉正则替换的步骤,直接返回折叠后的字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:40:31