我遇到了一些显示商标" TM"我的UILabel上的角色。
" TM"出现问题的角色是\ U0099而不是通常的\ U2122
我深入挖掘并发现了" TM" character \ U0099属于极少数中文字体。
所以我猜测iOS没有字体在标签中显示或根本不识别它。
我试图扫描我的数据" \ U0099"和string替换它到\ U2122,但似乎NSString函数将自动转义unicode字符,所以这" TM"人物甚至不会在那里。
以前有没有人遇到过这个问题,或者可以就如何处理这个\ U0099字符给我一些建议?
提前致谢
答案 0 :(得分:1)
我不清楚您是如何获得NSString
或您实际尝试解决问题的方法。所以这个建议可能完全不合适,但让我们看看它是否有帮助......
U + 0099是未分配的Unicode控制字符,它不是TM符号。如果将转义放入文字中,则很难将此字符作为Clang至少对象包含在NSString
中,并且Cocoa无法将UTF-8中的字节序列转换为NSString
它包含它。此问题可能是您的评论背后的内容,您无法将其替换为字符串。
然而从UTF-16开始,我确实创建了一个包含U + 0099的字符串:
unichar b[] = { 0x61, 0x62, 0x63, 0x99, 0x64, 0x65, 0x66 };
NSString *s = [[NSString alloc] initWithBytes:b length:14 encoding:NSUTF16LittleEndianStringEncoding];
这是字符串" abc \ U0099def" (调用characterAtIndex:3
会告诉你)。
使用相同的方法,可以生成其中只有U + 0099的NSString
:
unichar notTMChar = 0x99;
NSString *notTMStr = [[NSString alloc] initWithBytes:¬TMChar length:2 encoding:NSUTF16LittleEndianStringEncoding];
并且可以在字符串替换调用中使用:
NSString *t = [s stringByReplacingOccurrencesOfString:notTMStr withString:@"™"];
给予t
值" abc™def"根据需要。
警告:我们正在处理未分配的Unicode控制字符。 Clang / Cocoa以UTF-8拒绝了它,它可能是无意的,它接受了UTF-16。使用C库函数执行此操作可能更可靠。使用带有Clang 5.1的Xcode 5.1.1进行测试。
HTH
答案 1 :(得分:0)
感谢您的建议
我和我的客户谈过,他们同意不应该在那里
我还实现了rmaddy的建议,将实例\ u0099替换为\ u2122。
NSString *problemString = dictionaryWithU099AsValue.description;
if ([problemString rangeOfString:@"0099"].location != NSNotFound) {
NSString *fixedDescriptionString = [[[problemString stringByReplacingOccurrencesOfString:@"U0099" withString:@"U2122"];
// Then I reconstruct the NSString back to a new NSDictionary
}