从sqlite读取unicode并创建NSString
我在一个iOS应用程序上工作,我需要在其中存储和检索SQLite DB,这是一个有下标的NSString的表示。我可以在编译时使用常量创建NSString: @“Br\u2082\u CCl\u2084” \u2082是2下标,\u2084是4下标。im在SQLite数据库中存储的内容是: “Br\u2082\u CCl\u2084”从sqlite读取unicode并创建NSString,sqlite,ios,nsstring,subscript,Sqlite,Ios,Nsstring,Subscript,我在一个iOS应用程序上工作,我需要在其中存储和检索SQLite DB,这是一个有下标的NSString的表示。我可以在编译时使用常量创建NSString: @“Br\u2082\u CCl\u2084” \u2082是2下标,\u2084是4下标。im在SQLite数据库中存储的内容是: “Br\u2082\u CCl\u2084” 但是我不知道怎么做,就是把它重新转换成一个NSString。从数据库返回的数据是一个char*“Br\\u2082\u CCl\\u2084”,去掉多余的斜杠对我
但是我不知道怎么做,就是把它重新转换成一个NSString。从数据库返回的数据是一个char*“Br\\u2082\u CCl\\u2084”,去掉多余的斜杠对我微弱的实验没有任何影响。我需要一种方法把它放回NSString中-谢谢 您需要一个
NSString
stringWithCString
类方法或相应的initWithCString
实例方法。我解决了这样的问题-为了清晰起见,删除了错误检查-
unicode字符串进入从db编码的参数stringEncoded,如下所示:
“MgBr\u2082\u CH\u2082Cl\u2082”
谢谢在此之前,我介绍了所有stringWithCString:encoding选项,以及CFStringCreateWithCString中的大多数合理转换。除非我错过了什么,否则他们都不会改变它。我猜编译器知道当它遇到@string常量中的斜杠时该怎么做,但是在运行时没有一个转换似乎会咀嚼/u项。
+(NSString *)decodeUnicodeBytes:(char *)stringEncoded {
unsigned int unicodeValue;
char *p, buff[5];
NSMutableString *theString;
NSString *hexString;
NSScanner *pScanner;
theString = [[[NSMutableString alloc] init] autorelease];
p = stringEncoded;
buff[4] = 0x00;
while (*p != 0x00) {
if (*p == '\\') {
p++;
if (*p == 'u') {
memmove(buff, ++p, 4);
hexString = [NSString stringWithUTF8String:buff];
pScanner = [NSScanner scannerWithString: hexString];
[pScanner scanHexInt: &unicodeValue];
[theString appendFormat:@"%C", unicodeValue];
p += 4;
continue;
}
}
[theString appendFormat:@"%c", *p];
p++;
}
return [NSString stringWithString:theString];
}