2010-12-01 5 views
1

원격 db의 데이터를 로컬 sqlite3 db에 저장해야하는 응용 프로그램을 만들고 있습니다.문자열의 유니 코드 문자로 인해 응용 프로그램이 충돌 함

문제입니다 - 모든 문자열이 될 때 같은 유니 코드 문자 포함 삽입 : \ 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)); 
} 

사람이 어떻게이 문제를 해결하는 날을 제안 할 수 this-입니까?

감사합니다,

Miraaj

답변

5

cStringUsingEncoding: 반환 문자열이 손실없이 지정된 인코딩으로 변환 할 수없는 NULL, 따라서 귀하의 충돌. canBeConvertedToEncoding:을 사용하면 변환이 가능한지 확인할 수 있습니다.

또한 1NSASCIIStringEncoding에 해당하며 유니 코드 문자가있는 문자열의 경우에는 확실히 실패합니다. NSUTF8StringEncoding이 더 적절할 수 있습니다.

관련 문제