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“, 此时替换移除

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容