如何从String Swift中删除'\ u {ef}'字符

时间:2018-10-19 05:26:17

标签: ios swift string unicode-string

假设我有一个字符串

var a = "#bb #cccc #ddddd\u{ef}" 

我将其设置为这样的textview

let text = a.trimmingCharacters(in: .whitespacesAndNewlines)
let textRemoved = text?.replacingOccurrences(of: "\u{ef}", with: "", options: NSString.CompareOptions.literal, range:nil)
textView.text = textRemove

我正在尝试删除此处的\u{ef}字符。但是在textRemoved中却没有发生。请帮我怎么做。

  

我正在使用Xcode10。看起来低于10的Xcode版本正在运行   精细。是Xcode 10的错误吗?

7 个答案:

答案 0 :(得分:1)

我也遇到了与“ \ u {e2}” 相同的问题。我已经搜索了很多,但是找不到任何答案。然后我尝试了下面的代码,它对我有用。

var newString = ""
for char in strMainString.unicodeScalars{
    if char.isASCII{
        newString += String(char)
    }
}

希望也对您有用。

答案 1 :(得分:0)

在Xcode 10 Playground中,\u{00EF}的字符串替换有效。

var a = "#bb #cccc #ddddd\u{ef}" 
a = a.replacingOccurrences(of: "\u{00EF}", with: "")

我希望这对您有用。

答案 2 :(得分:0)

我尝试了以下方法,它就像一种魅力:

replacingOccurrences(of: "�", with: " ", options: NSString.CompareOptions.literal, range: nil)

答案 3 :(得分:0)

这是一个较晚的答案,但我也很难替换字符串中的“ \ u {ef}”。在调试期间,将鼠标悬停在字符串上时会显示\ u {ef}的存在,但是在描述中打印时,它只会显示空格。

let str = "\u{ef} Some Title"
print(str) //" Some Title"

我尝试了replacingOccurrences(of: "\u{ef}", with: "", options: NSString.CompareOptions.literal, range: nil).trimmingCharacters(in: .whitespaces),但同样失败了。

所以我在下面的代码段中使用了它,就像奇迹一样。

 let modifiedStr = str.replacingOccurrences(of: "\u{fffc}", with: "", options: NSString.CompareOptions.literal, range: nil).trimmingCharacters(in: .whitespaces)
print(modifiedStr)  //"Some Title"

希望这对某人有帮助!

答案 4 :(得分:0)

例如1

let text = "\u{ef}\u{ef}\u{ef}\u{ef}?哦哦哦"
        
let text1 = text.replacingOccurrences(of: "\u{fffc}", with: "", options: String.CompareOptions.literal, range: nil)

let text2 = text.replacingOccurrences(of: "\u{ef}", with: "", options: String.CompareOptions.literal, range: nil).trimmingCharacters(in: .whitespaces)

runnable

<img src="https://i.stack.imgur.com/styVo.png"/>

例如2

let strBefore = textDocumentProxy.documentContextBeforeInput 
let strAfter  = textDocumentProxy.documentContextAfterInput 
var textInput = strBefore + strAfter

let textInput2 = textInput.replacingOccurrences(of: "\u{ef}", with: "", options: String.CompareOptions.literal, range: nil)
        
let textInput1 = textInput.replacingOccurrences(of: "\u{fffc}", with: "", options: String.CompareOptions.literal, range: nil).trimmingCharacters(in: .whitespaces)

runnable

<img src="https://i.stack.imgur.com/xGHtW.png"/>

答案 5 :(得分:0)

与问题类似,但带有setData符号(修复方法相同):

\u{e2}不是字符,而是以\u{e2}字节开头的UTF8平面的子集。

因此,请看here,E2是常规的标点符号。 实际上有许多以0xE2开头但不限于此的符号,完整字符可以表示为f。 \u{e2}个字节(行分隔符)。

这说明了为什么Xcode e2 80 a8中显示的内容不能用\u{e2} ...函数代替。为了滤除正确的符号,您必须知道它是什么确切的符号,例如通过使用以下代码段:

replacingOccurrences

它打印到控制台:

"\u{2028}&?".forEach { (char) in
   print(Data(char.utf8).map { String(format: "%02x", $0) }.joined(separator: " "))
 }

每个符号的字节表示形式。

下一步是过滤字符串,转到here,然后在3d列中搜索您的字节和unicode代码点值是您所需要的(第一列),然后将其写入诸如e2 80 a8 26 f0 9f 98 b2 这样的快速代码中(取决于您的排序)。

最终功能可能类似于:

"\u{2028}\u{206A}..."

答案 6 :(得分:-1)

它正在工作,请再次检查:

 let a = "#bb #cccc #ddddd\u{ef}"
 let text = a.trimmingCharacters(in: .whitespacesAndNewlines)
 let textRemoved = text.replacingOccurrences(of: "\u{ef}", with: "", options: NSString.CompareOptions.literal, range:nil)
 print(textRemoved)

enter image description here