你是如何得到这我不清楚你NSString
或者你有什么真实目的是试图解决您的问题。所以这个建议可能完全不合适,但让我们看看它是否有帮助...
U + 0099是一个未分配的Unicode控制字符,它不是TM符号。如果将转义符放入文字中,至少要将对象转换为,那么很难将这个字符转换成一个,否则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
会告诉你这个)。
使用相同的方法的NSString
只有U + 0099在它可以产生:
和可在一个字符串中使用替换呼叫:
NSString *t = [s stringByReplacingOccurrencesOfString:notTMStr withString:@"™"];
给予t
值根据需要“abc™def”。
警告:我们正在处理未分配的Unicode控制字符。 Clang/Cocoa以UTF-8拒绝它,它可能是无意的,它以UTF-16接受它。使用C库函数来做到这一点可能更可靠。 Xcode 5.1.1和Clang 5.1被用于测试。
HTH
来源
2015-02-11 18:29:09
CRD
'\ U0099'不是一个有效的Unicode字符。'\ U0099'从哪里来?为什么不使用正确的字符? – rmaddy 2015-02-11 04:02:58
来自客户端的数据库。客户端位于亚洲,所以我假设他们有很多中文数据。 [link](http://www.fileformat.info/info/unicode/char/0099/index.htm)我知道一个事实,你可以在其他语言的输入法中使用不同的字符。例如“,”和“,” – timlwting 2015-02-11 04:53:53
Unicode是Unicode而不管语言或语言环境如何。 '\ U2122'是TM符号唯一的Unicode字符。这可能是因为你的客户端正在使用一些非Unicode(或非UTF)字符编码,导致TM符号被编码为十六进制值为'99',但它不会是'\ U0099'。如果你知道数据是什么编码,你可以简单地使用适当的编码从NSData中创建一个'NSString'。 – rmaddy 2015-02-11 05:00:58