1

我是 iOS 编程的新手。我正在开发一个应用程序,它从我的网络服务中获取一些句子,这些句子我插入到我的本地数据库中但是,一些句子包含土耳其语字符,例如:“ü, ğ, ç, ö”。我可以很好地将这些字符插入到我的数据库中,但是当我将它们输出到 a 时UILabel,它看起来像:“≈ü ƒü √º √∂”。我试图转换为NSUTF8StringEncoding但无济于事。

我有一个NSMutableArray名为questions,其中包含一些土耳其语字符。如何将此数组转换为 NSUTF8String 格式?

对不起我的英语不好:) 谢谢。

4

4 回答 4

1

啊,我认为问题不在于你需要转换你的数组——而是你如何显示字符串。

检查包含土耳其足球运动员数组的代码:

NSMutableArray *questions = [[NSMutableArray alloc] initWithObjects:@"Emre Belözoğlu", @"Gökhan Gönül", @"Mevlüt Erdinç", @"Nuri Şahin", nil];

const char *utf8string = [[NSString stringWithFormat:@"%@", [questions objectAtIndex:0]] UTF8String];
self.title = [NSString stringWithUTF8String:utf8string];

它现在应该以正确的格式将页面标题显示为“Emre Belözoğlu”。


问题也可能与将数据从 SQLite 解析到您的NSMutableArray. 这是我为一级方程式应用程序实现它的方法。

viewDidLoad我打电话时[self loadNamesFromDatabase];,它看起来像:

- (void)loadNamesFromDatabase
{
    NSString *file = [[NSBundle mainBundle] pathForResource:@"Formula1" ofType:@"sqlite"];
    sqlite3 *database = NULL;
    if (sqlite3_open([file UTF8String], &database) == SQLITE_OK) {
        sqlite3_exec(database, "select driver_id, driver_name, driver_nation, driver_team from drivers", MyCallback, drivers, NULL);
    }
    sqlite3_close(database);
}

你看到的MyCallback功能如下:

static int MyCallback(void *context, int count, char **values, char **columns)
{
    NSMutableArray *drivers = (NSMutableArray *)context;
    NSString *columnName;
    NSString *columnValue;
    NSMutableDictionary * record = [NSMutableDictionary dictionary];
    for (int i=0; i < count; i++) {
        columnName = [NSString stringWithUTF8String:columns[i]];
        if (values[i]){
            columnValue = [NSString stringWithUTF8String:values[i]];
        }
        else{
            columnValue = @"";
        }
        [record setObject:columnValue forKey:columnName]; 
    }
    [drivers addObject:record];

    return SQLITE_OK;
}

哪里driversNSMutableArray。这里的关键是stringWithUTF8String,您不需要使用顶部的代码,因为所有数据都应正确编码,因此将正确显示。

于 2013-02-11T09:56:27.267 回答
0

你能尝试另一种字体样式吗?例如;

myLabel.font = [UIFont fontWithName:@"Futura" size:10];

在 NSLog 行上看起来是什么?

于 2013-02-11T09:41:41.393 回答
0

这是替代答案:

NSString *text  = brokenString;
NSData *data    = [text dataUsingEncoding: [NSString defaultCStringEncoding] ];
NSString *convertedToTurkishString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding ];
于 2014-01-23T22:22:07.467 回答
0

const char *utfString = [strText cStringUsingEncoding:NSMacOSRomanStringEncoding];

于 2014-09-05T14:34:50.663 回答