如何处理在粘贴到 Xcode 时出现 "unprintable ascii character found in source file" 错误的用户输入字符串?

How to deal with a user input string that gives an "unprintable ascii character found in source file" error when pasted into Xcode?

我正在开发一款允许用户粘贴文本然后应用程序处理该文本的应用程序。

对于某个文本字符串,我收到 "unprintable ascii character found in source file" 错误。不可打印的字符似乎是一个制表符,但我不确定。无论如何,当我尝试处理文本时它会导致问题。

当我第一次将字符串保存在变量中时,如何过滤掉这个或其他不可打印的字符?

或者有其他方法可以解决这个问题吗?

如果您只对保留可打印的 ASCII 字符感兴趣,那么这段代码应该可行。

extension String {
    func printableAscii() -> String {
        return String(bytes: filter(self.utf8){[=10=] >= 32}, encoding: NSUTF8StringEncoding) ?? ""
    }
}

请注意,这也会过滤制表符和换行符,这可能不是预期的。不可打印的 ASCII 是任何小于 0x20 的值。这是 Playground 屏幕截图。

这是另一种方法。

此版本还允许换行符。

func convertString(string: String) -> String {
  var data = string.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)
  return NSString(data: data!, encoding: NSASCIIStringEncoding) as! String
}