由于字符串中的unicode字符导致应用程序崩溃

时间:2010-12-01 14:23:30

标签: string cocoa unicode nsstring utf-16

我正在创建一个应用程序,我必须将远程数据库中的数据存储到本地sqlite3 db中。

  

问题是 - 什么字符串   inserted包含unicode字符   例如:\ U00a0或\ U2022或\ U2019,   它崩溃了。

崩溃的代码部分是这个 -

NSString *insertQuery = @"insert into XYZ(field1,field2) values (@"1",[recordDict objectForKey:@"field2"]);

// recordDict contains value: @"\U00a0 \U00a0 \U00a0 \U00a0The Cadfsdfsdfptain\U2019s" for key: @"field2"

sqlite3_stmt *insertStmnt;
const char *sql = [insertQuery cStringUsingEncoding:1];

printf("insertQuery - %s",sql); // it is showing insertQuery - (null) and crashing at next line
if(sqlite3_prepare_v2(database, sql, -1, &insertStmnt, NULL) != SQLITE_OK){
    NSLog(@"Error while creating insert statement. '%s'",sqlite3_errmsg(database));
}

有人可以建议我如何解决这个问题吗?

谢谢,

Miraaj

1 个答案:

答案 0 :(得分:5)

当字符串无法无损地转换为指定的编码时,

cStringUsingEncoding:返回NULL,因此崩溃。您可以使用canBeConvertedToEncoding:确保转换成为可能。

此外,值1对应于NSASCIIStringEncoding,对于具有Unicode字符的字符串,它肯定会失败。 NSUTF8StringEncoding可能更合适。