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
相关产品推荐
相关产品推荐

