我是 iOS 编程新手。我正在开发一个应用程序,它从我的网络服务中获取一些句子,我将这些句子插入到我的本地数据库中但是,有些句子包含土耳其语字符,例如; “ü,ğ,ç,ö”。我可以将这些字符很好地插入到我的数据库中,但是当我将它们输出到 UILabel
时,它看起来像:“≈ü ƒü √º √∂”。我尝试转换为 NSUTF8StringEncoding 但无济于事。
我有一个 NSMutableArray
,名为 questions,其中包含一些土耳其语字符。如何将此数组转换为 NSUTF8String 格式?
抱歉我的英语不好 :) 谢谢。
最佳答案
啊,我认为问题不在于您需要转换数组 - 而是您如何显示字符串。
检查这个包含土耳其足球运动员数组的代码:
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
的方式上。以下是我在 Formula 1 应用程序中的实现方式。
在 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;
}
drivers
是一个 NSMutableArray
。这里的关键是 stringWithUTF8String
,您不需要使用顶部的代码,因为所有数据都应该正确编码,因此会正确显示。
关于ios - 土耳其语字符 ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14809188/