DrH*_*gie 6 objective-c char nsstring ios
我将SQLite3数据库中的结果列表拉入到UITableView.我从数据库中提取文本的代码是这样的:
char *menuNameChars = (char *) sqlite3_column_text(statement, 1);
NSString *menuName = [[NSString alloc] initWithUTF8String:menuNameChars];
NSLog(@"Retrieved %s,%@ from DB.", menuNameChars, menuName);
Run Code Online (Sandbox Code Playgroud)
当我使用时initWithUTF8String,有时会从数据库中正确复制信息.有时候,信息会从char*,但不是从以下地方正确显示NSString:
2011-10-24 22:26:54.325 [23974:207] Retrieved Cravin Chicken Sandwich – Crispy, (null) from DB.
2011-10-24 22:26:54.327 [23974:207] Retrieved Cravin Chicken Sandwich – Roast, (null) from DB.
2011-10-24 22:26:54.331 [23974:207] Retrieved Jr Chicken Sandwich, Jr Chicken Sandwich from DB.
2011-10-24 22:26:54.337 [23974:207] Retrieved Prime-Cut Chicken Tenders - 3 Piece, Prime-Cut Chicken Tenders - 3 Piece from DB.
Run Code Online (Sandbox Code Playgroud)
现在,如果我替换initWithUTF8String为initWithCString,代码工作完美.但是,XCode 4.2告诉我initWithCString已经弃用了.我知道我不想使用已弃用的代码,但如果initWithUTF8String不能正常工作,我应该使用什么?
我可以看到第一个日志行 ( ) 中的破折号Retrieved Cravin Chicken Sandwich ...不是简单的 ASCII HYPHEN-MINUS(U+002D、UTF-8 2D)。它是 UnicodeEN DASH字符(U+2013、UTF-8 E2 80 93)。第二行也一样。我的猜测是它们在您的数据库中编码不正确。如果您提供的-[NSString initWithUTF8String:]C 字符串不是有效的 UTF-8,它将返回nil。
尝试打印 的十六进制转储menuNameChars。您可以通过在调用后的行上设置断点来做到这一点sqlite3_column_text。到达断点时,menuNameChars在堆栈框架窗口中右键单击/按住 Control 单击并选择View memory of "*menuNameChars"(注意*)。
| 归档时间: |
|
| 查看次数: |
7762 次 |
| 最近记录: |