2010-12-01 103 views
1

我正在製作一個應用程序,我必須將遠程數據庫中的數據存儲到本地sqlite3數據庫中。由於字符串中的Unicode字符導致應用程序崩潰

問題是 - 當任意字符串是 插入包含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

回答

5

cStringUsingEncoding:回報NULL當字符串不能無損轉換爲指定編碼,因此你的崩潰。您可以使用canBeConvertedToEncoding:確保可以進行轉換。

此外,值1對應於NSASCIIStringEncoding,這對於具有Unicode字符的字符串肯定會失敗。 NSUTF8StringEncoding可能更合適。

相關問題