当我在一些NSDictionary中存储Nsstring并将该字典记录到控制台时,如下所示:
Nsstring *someString = @"Münster"; NSDictionary *someDict = [ NSDictionary dictionaryWithObjectsAndKeys: someString,@"thestring" ]; NSLog ( @"someDict: %@",[ someDict description ] );
控制台输出如下所示:
unicode_test[3621:903] someDict: { thestring = "M\U00fcnster"; }
解决方法
可以使用给定字符串的UniChar字符串表示形式的循环来解决该问题.在Nsstring上实现为扩展,它看起来像这样:
- (Nsstring *) escapedUnicode { NSMutableString *uniString = [ [ NSMutableString alloc ] init ]; UniChar *uniBuffer = (UniChar *) malloc ( sizeof(UniChar) * [ self length ] ); CFRange stringRange = CFRangeMake ( 0,[ self length ] ); CFStringGetCharacters ( (CFStringRef)self,stringRange,uniBuffer ); for ( int i = 0; i < [ self length ]; i++ ) { if ( uniBuffer[i] > 0x7e ) [ uniString appendFormat: @"\\u%04x",uniBuffer[i] ]; else [ uniString appendFormat: @"%c",uniBuffer[i] ]; } free ( uniBuffer ); Nsstring *retString = [ Nsstring stringWithString: uniString ]; [ uniString release ]; return retString; }