我得到了NSString来自UIWebView包含iPhone的表情符号,但不包括表情符倒车文本.我需要NSString再次显示反向,UIWebView但无法使用表情符号获取反向字符串.我没有在字符串中识别表情符号字符.我有iOS 6.0的xcode 4.5.这是我的代码:
- (NSString *) createReverseStringFromString:(NSString *)inputString {
if (inputString.length <= 0)
return inputString;
NSMutableString *mutableReverseString = [[NSMutableString alloc]
initWithCapacity:inputString.length];
Thfor (NSInteger i = inputString.length -1; i >= 0; i--) {
NSString *characterString = [inputString substringWithRange:NSMakeRange(i, 1)];
[mutableReverseString appendString:characterString];
NSLog(@"mutableReverseString..%@",mutableReverseString);
}
NSString *outputString = [mutableReverseString copy];
[mutableReverseString release];
return [outputString autorelease];
}
Run Code Online (Sandbox Code Playgroud)
问题是许多表情符号字符在内部存储为两个字符的"代理对".
例如,"THUMBS UP SIGN"是Unicode点U + 1F44D,但如果将其存储在一个NSString并用于substringWithRange获取单个字符,则会得到两个字符:
U+D83D, U+DC4D
Run Code Online (Sandbox Code Playgroud)
这是U + 1F44D的UTF-16代理对.
当然,如果你反转这两个字符,输出就是垃圾.
解决方案是用于rangeOfComposedCharacterSequenceAtIndex获取"属于一起"的字符序列:
- (NSString *) createReverseStringFromString:(NSString *)inputString {
if (inputString.length <= 0)
return inputString;
NSMutableString *mutableReverseString = [[NSMutableString alloc]
initWithCapacity:inputString.length];
NSInteger i = inputString.length;
while (i > 0) {
NSRange range = [inputString rangeOfComposedCharacterSequenceAtIndex:i-1];
NSString *characterString = [inputString substringWithRange:range];
[mutableReverseString appendString:characterString];
i = range.location;
}
NSString *outputString = [mutableReverseString copy];
return outputString;
}
Run Code Online (Sandbox Code Playgroud)
此函数正确反转包含表情符号字符的字符串.
(注:我省略了一切release,autorelease称因为我总是ARC编译您必须再次补充说,在适当情况下.)
| 归档时间: |
|
| 查看次数: |
2136 次 |
| 最近记录: |