Swift 字符串 截取 半个表情emoji \u0000fffd 的处理

UITextField(UITextView) 在做输入字符串长度限制时
有两种长度需求限制:

  1. String.count :中文、英文、表情emoji都长度都算一个
  2. (String as NSString).length: 中文、英文长度算1,表情emoji长度为2、4、7等等

如果为1的情况,一般没有问题

主要为2的情况下,

// text:Optional("123456789")
let newText = (text as NSString).substring(to: 10)

这个newText会截取到半个表情emoji,会显示

text:Optional("123456789�")

后边这个“�”是我们不需要的错误的半个表情emoji

如何剔除:

newText = (text as NSString).substring(to: maxLength)
/// 有可能会截取到半个表情,所以这里剔除掉半个表情的情况
if let data = newText.data(using: .utf8), let temp = NSString.init(data: data, encoding: String.Encoding.utf8.rawValue), temp.contains("\u{0000fffd}") {
  newText = temp.replacingOccurrences(of: "\u{0000fffd}", with: "") as String
}

emoji截取半个之后,转换成utf-8,再解码, 成为”\U0000fffd“, 此时替换移除

你可能感兴趣的:(Swift 字符串 截取 半个表情emoji \u0000fffd 的处理)