如何在Swift中从字符串中移除"\U0000fffc"?

3

我已经将一张图片添加到文本框中,现在想要将其删除。我尝试了以下两行代码,但都没有成功:

string = string.stringByReplacingOccurrencesOfString("\\U0000fffc", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
string = string.stringByReplacingOccurrencesOfString("\U0000fffc", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

任何帮助都将不胜感激,非常感谢!

你是想替换字面序列"\U0000fffc",还是Unicode字符U+FFFC?提供更多上下文会更有帮助。 - undefined
我猜是Unicode字符?我在一个文本字段中添加了一张图片,现在想要将其移除。 - undefined
请展示println(string.dataUsingEncoding(NSUTF32BigEndianStringEncoding)!)的结果,这样我们就可以看到字符串实际包含的内容。 - undefined
<00000048 00000065 0000006c 0000006c 0000006f 0000000a 0000000a 0000fffc>从"Hello\n\n\U0000fffc"翻译为中文。 - undefined
2个回答

12

在Swift中,Unicode转义序列与Objective-C不同,Unicode字符U+FFFC被转义为\u{fffc}

这是您的字符串:

var string = "Hello\n\n\u{fffc}"
println(string.dataUsingEncoding(NSUTF32BigEndianStringEncoding)!)
// <00000048 00000065 0000006c 0000006c 0000006f 0000000a 0000000a 0000fffc>

现在删除所有的U+FFFC字符:

string = string.stringByReplacingOccurrencesOfString("\u{fffc}", withString: "")
println(string.dataUsingEncoding(NSUTF32BigEndianStringEncoding)!)
// <00000048 00000065 0000006c 0000006c 0000006f 0000000a 0000000a>

请注意,options:range:是可选参数,在这种情况下不需要。


针对 Swift 3/4 的更新:

var string = "Hello\n\n\u{fffc}"
print(string.data(using: .utf32BigEndian)! as NSData)
// <00000048 00000065 0000006c 0000006c 0000006f 0000000a 0000000a 0000fffc>

string = string.replacingOccurrences(of: "\u{fffc}", with: "")
print(string.data(using: .utf32BigEndian)! as NSData)
// <00000048 00000065 0000006c 0000006c 0000006f 0000000a 0000000a>

顺便说一下,U+FFFC 是“对象替换字符”,所以我想知道它是怎么进入字符串的... - undefined
NSAttributedString中的NSTextAttachment将在其string属性中被转换为"\u{FFFC}",用作占位符。 - undefined

2

方法stringByReplacingOccurrencesOfString可以作用于字符串的部分或整个字符串。

例如,通过将范围从字符串开头到结尾,可以对整个字符串进行操作:

let original = "First part \\U0000fffc Last part"

let originalRange = Range<String.Index>(start: original.startIndex, end: original.endIndex)

let target = original.stringByReplacingOccurrencesOfString("\\U0000fffc", withString: "", options: NSStringCompareOptions.LiteralSearch, range: originalRange)

println(target) // prints "First part  Last part"

"\U0000fffc" 是由于插入图像而添加到字符串中的,这是否会改变它的删除方式? - undefined
基本上,我在一个文本字段中添加了一张图片,现在希望将其删除。 - undefined
range: nil 对整个字符串进行搜索/替换,所以这不是问题。 - undefined
回答已更新,感谢马丁的准确说明,我对兰达尔失败的原因完全错误了。 - undefined
1
@ericd:尽管我提供的信息不足,但你的帮助是非常感激的 :) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接