moo*_*ots 5 utf-8 nsstring ios emoji nsrange
我正在使用 TTTAttributedLabel 将格式应用于文本,但是它似乎崩溃了,因为我试图将格式应用于包含表情符号的范围。例子:
NSString *text = @"@user1234 #hashtag"; // text.length reported as 22 by NSLog as each emoji is 2 chars in length
cell.textLabel.text = text;
int length = 8;
int start = 13;
NSRange *range = NSMakeRange(start, length);
if (!NSEqualRanges(range, NSMakeRange(NSNotFound, 0))) {
// apply formatting to TTTAttributedLabel
[cell.textLabel addLinkToURL:[NSURL URLWithString:[NSString stringWithFormat:@"someaction://hashtag/%@", [cell.textLabel.text substringWithRange:range]]] withRange:range];
}
Run Code Online (Sandbox Code Playgroud)
注意:我收到了来自 API 的 NSRange 值以及文本字符串。
在上面我试图将格式应用于#hashtag。通常这工作正常,但因为我在字符串中包含表情符号,我相信识别的范围正在尝试格式化表情符号,因为它们实际上是 UTF 值,这在 TTTAttributedLabel 中会导致崩溃(它实际上挂起而没有崩溃,但是。 ..)
奇怪的是,如果有 1 个表情符号它可以正常工作,但如果有 2 个则中断。
谁能帮我弄清楚在这里做什么?
我假设这是来自 Twitter API,并且您正在尝试使用它们返回的实体字典。我刚刚编写代码来支持处理这些范围以及NSString字符串范围的版本。
我的方法是“修复”Twitter 返回的实体字典以应对额外的字符。由于各种原因,我无法共享代码,但这就是我所做的:
unichar通过循环遍历字符串的整个范围,unichar执行以下操作:
unichar在代理对范围内 ( 0xd800-> 0xdfff)。unichars 表示),则将索引移动 1。然后将循环计数器加 1 以跳过该代理对的伙伴,因为它现在已被处理。我希望这有帮助!我也希望有一天我可以开源这段代码,因为我认为它将非常有用!
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |