快速删除阿拉伯语中的变音符号

kel*_*dik 4 string arabic diacritics swift arabic-support

我正在尝试删除阿拉伯文本变音符号。例如我需要将其转换\xd9\x8e\xd8\xa8为此\xd8\xa8,这是我的代码:

\n\n
if (text != "") {\n    for char in text! {\n        print(char)\n        print(char.unicodeScalars.first?.value)\n        if allowed.contains("\\(char)"){\n            newText.append(char)\n        }\n    }\n    self.textView.text = text!\n} else {\n//            TODO :\n//            show an alert\n    print("uhhh no way")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经尝试过这些解决方案,但没有运气:

\n\n

如何从 Swift 中的字符串中删除变音符号?

\n\n

NSString:从字符串中删除 UTF-8 重音符号的简单方法?

\n

a.m*_*sri 6

您可以使用正则表达式,试试这个代码

\n\n
 let myString = "\xd8\xa7\xd9\x84\xd9\x92\xd8\xad\xd9\x8e\xd9\x85\xd9\x92\xd8\xaf\xd9\x8f \xd9\x84\xd9\x90\xd9\x84\xd9\x91\xd9\x8e\xd9\x87\xd9\x90 \xd8\xb1\xd9\x8e\xd8\xa8\xd9\x91\xd9\x90 \xd8\xa7\xd9\x84\xd9\x92\xd8\xb9\xd9\x8e\xd8\xa7\xd9\x84\xd9\x8e\xd9\x85\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e"\n        let regex = try! NSRegularExpression(pattern: "[\\\\u064b-\\\\u064f\\\\u0650-\\\\u0652]", options: NSRegularExpression.Options.caseInsensitive)\n        let range = NSMakeRange(0, myString.unicodeScalars.count)\n        let modString = regex.stringByReplacingMatches(in: myString, options: [], range: range, withTemplate: "")\n        print(modString)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

输出:\xd8\xa7\xd9\x84\xd8\xad\xd9\x85\xd8\xaf\xd9\x84\xd9\x84\xd9\x87\xd8\xb1\xd8\xa8\xd8\xa7\xd9\x84 \xd8\xb9\xd8\xa7\xd9\x84\xd9\x85\xd9\x8a\xd9\x86

\n
\n


Has*_*jmi 5

使用这个扩展:

extension String {
    /// strip combining marks (accents or diacritics)
    var stripDiacritics: String {
        let mStringRef = NSMutableString(string: self) as CFMutableString
        CFStringTransform(mStringRef, nil, kCFStringTransformStripCombiningMarks, false)
        return mStringRef as String
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述