2016-01-06 4 views
0

Когда я сохраняю, например, строку в базе данных: «éric», когда я ее извлекаю, я получаю строку вроде этого √ © ric, это та же проблема с другими символами, такими как à, è ...xcode sql символы с акцентом изменен

Я использую sqlite3.h базы данных

инициализирования:

- (void) inistalizeDataBase{ 
NSString *docsDir; 
NSArray *dirPaths; 

// Get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(
               NSDocumentDirectory,  
NSUserDomainMask, YES); 
docsDir = dirPaths[0]; 
NSString *_databasePath = [[NSString alloc] 
          initWithString: [docsDir 
stringByAppendingPathComponent: 
              @"trueorfalse.db"]]; 

NSFileManager *filemgr = [NSFileManager defaultManager]; 
if ([filemgr fileExistsAtPath: _databasePath ] == NO) 
{ 
    const char *dbpath = [_databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &ppDb) == SQLITE_OK) 
    { 




      char *errMsg; 
      NSString *requeteEnString= [NSString 
    stringWithFormat:@"CREATE TABLE IF NOT EXISTS `%s` (`id` int(11) NOT  
NULL,`questions` varchar(1024),`good_response` 
varchar(1024),`difficulty` varchar(45),`response` 
varchar(1024),`imagename` varchar(255),`asked` varchar(45),`type` 
    varchar(255) ,PRIMARY KEY (`id`))", "questions"]; 
    newStr 




      const char *sql_stmt =[requeteEnString UTF8String]; 

      NSString *filePath = [[NSBundle mainBundle]  
    pathForResource:@"questions" ofType:@"sql"]; 
      NSData *htmlData = [NSData 
dataWithContentsOfFile:filePath]; 
      NSString* newStr = [[NSString alloc] initWithData:htmlData 
encoding:NSUTF8StringEncoding]; 

      const char *request = [newStr UTF8String]; 
      if (sqlite3_exec(ppDb, sql_stmt, NULL, NULL, &errMsg) ==  
SQLITE_OK) 
      { 
       if (sqlite3_exec(ppDb, request, NULL, NULL, &errMsg) 
== SQLITE_OK) 
       { 
        NSLog(@"Creation Data Base succed, %s", 
"questions"); 
       } 
       else{ 
        NSLog(@"echeeeeeec, %s", errMsg); 

       } 
      } 
      else{ 
      NSLog(@"echeeeeeec, %s", errMsg); 
      } 





     //sqlite3_close(ppDb); 
    } else { 
     NSLog(@"Error when trying open Data Base"); 
    } 

    } 
    else{ 
    const char *dbpath = [_databasePath UTF8String]; 

    sqlite3_open(dbpath, &ppDb); 
    } 
} 

Моего файл question.sql на utf8, NewStr имеет правильные символы

И для извлечения данных я сделать что-то вроде этого

-(NSMutableArray*)retrieveListQuestions{ 

NSMutableArray* listQuestionToReturn = [[NSMutableArray alloc] init]; 

    DataBaseHelper *dataBaseHelper = [DataBaseHelper  
sharedDataBaseHelper]; 
[dataBaseHelper inistalizeDataBase]; 
sqlite3* ppDb = dataBaseHelper.ppDb; 
NSString *query = [NSString stringWithFormat:@"SELECT `id`,`questions`, `good_response`, `difficulty`, `response`, `imagename`, `asked`, `type` FROM %s where asked = 0","questions"]; 
sqlite3_stmt *statement; 
if (sqlite3_prepare_v2(ppDb, [query UTF8String], -1, &statement, nil) 
    == SQLITE_OK) { 

    while (sqlite3_step(statement) == SQLITE_ROW) { 
     Questions *question = [[Questions alloc]init]; 
     question.id = sqlite3_column_int(statement, 0); 

// HERE I HAVE WEIRD CHARACTERS 
     question.question = [NSString stringWithFormat:@"%s",(char   
*)sqlite3_column_text(statement, 1)]; 
     question.good_response = [NSString stringWithFormat:@"%s",  
(char *)sqlite3_column_text(statement, 2)]; 
     question.difficulty = [NSString stringWithFormat:@"%s",(char 
    *)sqlite3_column_text(statement, 3)]; 
     question.response = [NSString stringWithFormat:@"%s",(char 
    *)sqlite3_column_text(statement, 4)]; 
     question.imagename = [NSString stringWithFormat:@"%s",(char 
    *)sqlite3_column_text(statement, 5)]; 
     question.asked = [NSString stringWithFormat:@"%s",(char 
    *)sqlite3_column_text(statement, 6)]; 
     question.type = [NSString stringWithFormat:@"%s",(char 
    *)sqlite3_column_text(statement, 7)]; 

     [listQuestionToReturn addObject:question]; 
    } 
    sqlite3_finalize(statement); 
} 
return listQuestionToReturn; 
} 

любая помощь будет приветствоваться благодарственное-х

-------------------------- EDIT-- --------------------

проблема приходят из stringWithFormat

Вместо того, чтобы использовать эту
question.question = [NSString stringWithFormat: @ "% s ", (char
*) sqlite3_column_text (statement, 1)]; Я использую stringWithUTF8String и теперь это работа question.question = [NSString stringWithUTF8String: (char
*) sqlite3_column_text (statement, 1)];

+1

SQLite не изменяет содержимое строки в любом случае (за исключением когда вы на самом деле используете строковые функции). Вы используете неправильную кодировку при записи или чтении данных; вы не показали ни одного. –

+0

ok, но я не понимаю, что вы подразумеваете под «вы не показали ни одного» – tamtoum1987

+0

Спасибо вам, что нашли проблему вместо этого вопроса .question = [NSString stringWithFormat: @ "% s", (char *) sqlite3_column_text (statement, 1)]; Я использую это и теперь это работа :) question.question = [NSString stringWithUTF8String: (char *) sqlite3_column_text (statement, 1)]; – tamtoum1987

ответ

0

Проблема приходят из stringWithFormat

Вместо того, чтобы использовать эту

question.question = [NSString stringWithFormat:@"%s",(char *)sqlite3_column_text(statement, 1)]; 

я использую stringWithUTF8String и теперь это работа

question.question = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];