swift - 3字节的unicode字符可以自动转换成ascii吗
问题描述
是否可以使用 Swift 字符串和编码自动将下面显示的两个“连字符”替代方案转换为 ascii“连字符”,而无需求助于调用的特定实例replacingOccurrencesOfWith
?
.replacingOccurrences(of: "—", with: "-") // Replace "e2 80 94" (wide hyphen) with a normal hyphen
.replacingOccurrences(of: "‐", with: "-") // Replace "e2 80 90" (narrow hyphen) with a normal hyphen
我目前正在使用该replacingOccurrencesOfWith
函数来转换某些字符,当我尝试将包含字符串插入我的 MySQL 数据库时,这些字符会导致我的程序崩溃。由于有很多这样的有问题的字符(所有这些似乎都是 3 字节的 unicode),我最终需要一个巨大的replacingOccurrencesOfWith
调用列表来处理它们。所以我正在寻找更有效的东西。
关于“自动”,我想知道是否有一个 Swift String 函数可以将unicode 字符降级为近似正确的 ascii 字符?例如; “ń”->“n”,“ó”->“o”,“ü”->“u”,以及“-”->“-”,“-”->“-”。
我需要转换这些字符的原因是,当我尝试将它们插入我的数据库时,MySqlSwiftNative 会返回 MySQL 错误,即使我已经为我的数据库/表设置了DEFAULT CHARACTER SET utf8mb4
和COLLATE utf8mb4_unicode_ci
,并且可以使用 phpMyAdmin 直接将字符插入数据库。
MySqlSwiftNative(来自 GitHub/mcorega) - 可使用的原生 Swift MySQL API,遗憾的是,它在大约两年内没有任何活动。
解决方案
您可以对 ASCII 进行“字符串转换”:
let text = "ń—ó‐ü"
let trans = text.applyingTransform(StringTransform(rawValue: "Latin-ASCII"), reverse: false)!
print(trans) // n-o-u
print(Array(text.unicodeScalars))
// ["\u{0144}", "\u{2014}", "\u{00F3}", "\u{2010}", "\u{00FC}"]
print(Array(trans.unicodeScalars))
// ["n", "-", "o", "-", "u"]
有关详细信息,请参阅
推荐阅读
- python - 仅当单独列中的差异在 [-n, +n] 范围内时,才在公共列上加入两个 DataFrame
- sql - 我想在特定字符是sql中存在的字符之后提取一个字符串
- python-annoy - 无法用大数据集建立索引,似乎需要无限时间
- python - 如何在 tkinter 的文本小部件中停止复制、粘贴和退格?
- javascript - 如何在输入中添加随机数?
- html - 单击另一个按钮后如何设置按钮样式?
- python - 你如何让python文件运行另一个python文件
- python - 为 for 循环创建主进程
- wpf - 选中项目时在 ListView WPF 中启用按钮并启用选中项目的按钮
- reactjs - 反应 useCallback 钩子没有按预期工作