【问题标题】:Accented character incorrectly encoding in NSString Array重音字符在 NSString 数组中错误编码
【发布时间】:2012-06-09 07:12:31
【问题描述】:

?我正在从一个列表中构建一个由 NSStrings 组成的 NSMutableArray,其中一些字母带有重音符号(土耳其语)。我已经能够将结果编码成 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 字符串进行编码,然后按空格将字符串解压到数组中。

【问题讨论】:

    标签: ios encoding nsstring nsmutablearray


    【解决方案1】:

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

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

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

    【讨论】:

    • 你是对的。事实上,我根本不需要 stringWithUTF8String 编码,通常的 @"" 工作正常。谢谢。
    • 输出:element 3: üç element 4: dört
    【解决方案2】:

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

    【讨论】:

    • 你是对的:它们确实在 UILabel 中正确显示。谢谢!
    • 不客气 :) 如果有用,请不要忘记接受答案 :)
    猜你喜欢
    • 2012-01-08
    • 2020-11-28
    • 1970-01-01
    • 2011-12-28
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多