Сбой приложения из-за символов юникода в строке - PullRequest
1 голос
/ 01 декабря 2010

Я делаю приложение, в котором мне нужно хранить данные из удаленной базы данных в локальную базу данных sqlite3.

Проблема в том, - когда любая строка будет вставлено содержит символ 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 Ответ

5 голосов
/ 01 декабря 2010

cStringUsingEncoding: возвращает NULL, когда строка не может быть без потерь преобразована в указанную кодировку, что приводит к вашей аварии. Вы можете использовать canBeConvertedToEncoding:, чтобы обеспечить возможность конвертации.

Кроме того, значение 1 соответствует NSASCIIStringEncoding, что, безусловно, приведет к ошибке для строки с символами Unicode. NSUTF8StringEncoding может быть более подходящим.

...