UITableViewController和SQLite语句中的土耳其语字符

时间:2014-05-11 12:54:50

标签: ios objective-c sqlite utf-8 uitableview

我正在为iPhone编写一个应用程序。它从“sqlite”数据库读取数据,将数据放入NSMutableArray并在UITableView中显示数据(“indexPath”对应于数据库中的id列)。数据库中的一列是turkish_words,其中包含土耳其语单词,如İöşüçğı。我正在使用“FMDB框架”从数据库中读取数据。

NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:dbFileName];

FMDatabase *database = [FMDatabase databaseWithPath:dbPath];
[database open];
NSString *sqlSelectQuery = @"SELECT id,turkish_word FROM words";

然后我将数据添加到NSMutableArray,如下所示:

FMResultSet *resultsWithNameLocation = [database executeQuery:sqlSelectQuery];
while([results next]) {
    NSString *strID = [NSString stringWithFormat:@"%d",[results intForColumn:dbIDKey]];
    NSString *strTur = [NSString stringWithFormat:@"%@",[results stringForColumn:dbTurkishKey]];

[self.words insertObject:[strTur lowercaseString] atIndex:[strID integerValue]];

}

所有这些代码都在AppDelegate.m

UITableView随后会填充其他appDelegate.wordsUITableViewController的数据。

接下来是问题所在。带有土耳其语字符的单元格看起来像Thisenter image description here

现在让我们说我想要这个词的细节。当我点击包含单词的单元格时,将推送新的UIView。 Word将传递给

中的“DetailViewController”
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

一切正常,我点击“DetailViewController”中的单词。现在我正在尝试根据我之前SELECT中的单词创建UITableViewController语句。当我NSLog它时,它看起来很好,例如:

SELECT id,turkish_word,detail FROM words WHERE turkish_word =“fi̇ldi̇şi̇saḣli̇”

它看起来不错,但结果得到0行。当我使用“sqlite bash”运行查询时,它也返回0行,但是当我输入它时,我得到了我想要的行。请记住,复制的一个和键入的一个看起来相同,复制的一个从NSLog复制,它返回0行,键入的一行返回我想要的结果。

我真的不知道该怎么办。

1 个答案:

答案 0 :(得分:1)

问题出现了,因为我正在向[myNSString lowercaseString]添加NSMutableArray字词。似乎字符串编码在该过程中被更改,导致我无法查询选定的单元格文本。

相反,我已将原始记录添加到NSMutableArray,并在方法中创建了单独的NSStrings:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

然后使用[myString lowercaseString]