在NSString数组中重音字符编码错误

时间:2012-06-09 07:12:31

标签: ios encoding nsstring nsmutablearray

?我正在从列表中构建一个NSMtringArray的NSStrings,其中一些字母是重音的(土耳其语)。我已经能够编码成NSString和NSLog的结果。但是当我将NSString添加到我的NSMutableArray时,编码是不正确的。

这有效:

NSString* temp = [[NSString alloc] init];
char *str = "üç"; 
temp = [NSString stringWithUTF8String:"üç"];
NSLog(@"str: %@",temp);

记录输出:

2012-06-09 09:09:18.398 Fluent[1821:f803] str: üç

当我尝试将它添加到我的NSMutableArray时:

ones = [NSArray arrayWithObjects:@"",@"bir",@"iki",temp,@"dört",@"beş",@"altı",@"yedi",@"sekiz",@"dokuz",nil];
NSLog(@"ones: %@",ones);    

它失去了编码:

2012-06-09 09:09:18.399 Fluent[1821:f803] ones: (
"",
bir,
iki,
"\U00fc\U00e7",
"d\U00f6rt",
"be\U015f",
"alt\U0131",
yedi,
sekiz,
dokuz)

关于如何做到这一点的任何想法?我读过这个领域的帖子似乎专注于通过HTTP传输。

我想要一种更简单的方法,例如在必要时对C字符串进行编码,然后通过空格对数组进行解串。

2 个答案:

答案 0 :(得分:1)

这不会丢失编码,尝试将nsarray中的字符串添加到UILabel或UITextField,它应该是正确的 编写Unicode表示的这种行为仅在NSLog

时在控制台中发生

答案 1 :(得分:1)

您的字符串编码不正确。您看到的是将完整数组写入日志的工件。在这种情况下,首先将数组转换为属性列表格式,然后写入日志。

如果您创建一个循环并将每个元素分别写入日志,您将看到一切正常:

NSUInteger count = [ones count];
for (NSUInteger i = 0; i < count; i++) {
    NSLog(@"element %d: %@", i, [ones objectAtIndex: i]);
}