Цель c - получить неанглийские символы из sqlite - PullRequest
1 голос
/ 30 марта 2012

Я действительно искал ответ, но я не нашел свой ответ :(

Проблема в неанглийских символах (французском и греческом), только с английскими символами это работает нормально.

Я вывожу вещи из базы данных sqlite, которая безупречно сочетается с английскими символами, но не с французскими или греческими.

На данный момент все идет не так:

if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)

Thisверните false, чтобы программа не продолжалась.

Я читал о UTF-8 и UTF-16.
Это будет sqlite3_open для UTF-8 и sqlite3_open16 для UTF-16.
Когда я использую sqlite3_open16, он вообще не открывается.

Мне нужно открывать базы данных с французскими символами и одной с греческим.
Кто-нибудь знает, что делать?

Это код, где я открываю базу данных:

startLanguage = the language where I start with, this is also the database name.
databasePath = the path to the database file. e.g.: /Users/joeranbosma/Library/Application Support/iPhone Simulator/5.0/Applications/80C89C95-418D-487F-B697-6BEA4B0DAA66/Documents/frans.sql

-(void) readWordsFromDatabase {
    // Setup the database object
    sqlite3 *database;

    // Init the words Array
    words = [[NSMutableArray alloc] init];

    // Open the database from the users filessytem
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        // Setup the SQL Statement and compile it for faster access
        NSString *mySQLstatement = [@"select * from " stringByAppendingString:startLanguage];
        const char *sqlStatement = [mySQLstatement UTF8String];
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            // Loop through the results and add them to the feeds array
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                // Read the data from the result row
                NSString *woordA = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
                NSString *woordB = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

                // Create a new word object with the data from the database
                Word *word = [[Word alloc] initWithWordA:woordA wordB:woordB];

                // Word *words = [[Word alloc] initWithWordName:aName description:aDescription url:aImageUrl];

                // Add the word object to the words Array
                [words addObject:word];

                [word release];
            }
        }

        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);

    }
    sqlite3_close(database);

}

Редактировать 1
Я нашел решение!
Если вы поместите все в один файл, исделать несколько таблиц, это работает.

Я хотел бы знать, почему это так, так что если кто-нибудь знает, я быценить это

...