UTF 8 строка (русская кодировка) ошибки, iphone - PullRequest
1 голос
/ 21 мая 2011
for (NSDictionary *status in statuses)
    {
        for (NSMutableString *name in [statuses objectForKey:@"response"]) 
        {

            NSMutableString *name1=[[NSMutableString alloc] initWithFormat:@"%@",name];
            const char *utf8name=[name1 UTF8String];
            NSMutableString *name_str=[[NSMutableString alloc] initWithCString:utf8name encoding:4]; 

            [list_names addObject:[NSMutableString  stringWithFormat:@"%@",name_str]];
            [name_str release];
        }
NSLog(@"%@",list_names);

(
    "{\n    \"first_name\" = \"\\U0421\\U0442\\U0430\\U0441\";\n    \"last_name\" = \"\\U0411\\U044b\\U043a\\U043e\\U0432\";\n    uid = 41182952;\n}",
    "{\n    \"first_name\" = Victoria;\n    \"last_name\" = Violette;\n    uid = 56292826;\n}",
    "{\n    \"first_name\" = \"\\U042e\\U043b\\U044f\";\n    \"last_name\" = \"\\U0411\\U0438\\U043b\\U043e\\U0448\\U043d\\U0438\\U0447\\U0435\\U043d\\U043a\\U043e\";\n    uid = 73743149;\n}",
    "{\n    \"first_name\" = \"\\U041a\\U0430\\U0440\\U0438\\U043d\\U0430\";\n    \"last_name\" = \"\\U041f\\U0435\\U0440\\U043e\\U0432\\U0430\";\n    uid = 77001828;\n}",
    "{\n    \"first_name\" = \"\\U0415\\U043b\\U0438\\U0437\\U0430\\U0432\\U0435\\U0442\\U0430\";\n    \"last_name\" = \"\\U041b\\U0435\\U0431\\U0435\\U0434\\U0435\\U043d\\U043a\\U043e\";\n    uid = 90720663;\n}",
    "{\n    \"first_name\" = \"\\U041c\\U0430\\U0440\\U0438\\U043d\\U0430\";\n    \"last_name\" = \"\\U0414\\U0440\\U044b\\U0433\\U0430\";\n    uid = 91646824;\n}",
    "{\n    \"first_name\" = \"\\U0412\\U0438\\U043a\\U0430\";\n    \"last_name\" = \"\\U041a\\U0430\\U0440\\U0430\\U0431\\U0446\\U043e\\U0432\\U0430\";\n    uid = 96178026;\n}",
    "{\n    \"first_name\" = Pink;\n    \"last_name\" = Angel;\n    uid = 97996978;\n}",
    "{\n    \"first_name\" = \"\\U0410\\U043d\\U043d\\U0430\";\n    \"last_name\" = \"\\U0420\\U043e\\U0434\\U0438\\U043d\\U0430\";\n    uid = 133053290;\n}"
)}

Текст на английском отображается нормально, а на русском нет. Как это исправить?Я думал, что проблема в UTF8, но я изменяю кодировку на UTF8 и никаких изменений.

1 Ответ

0 голосов
/ 21 мая 2011

Когда вы делаете это:

NSLog(@"%@", list_names);

он вызывает метод -description для list_names.Для NSArray это распечатывает массив так, как он будет выглядеть в старом текстовом списке.Спецификатор формата %@ обычно используется в целях отладки, когда он не используется для строк.

Код преобразуется в UTF-8, а затем обратно в NSString.Эта операция туда и обратно не имеет смысла.

Код использует [NSString stringWithFormat:@"%@", obj].Это эквивалентно вызову [obj description].

Код повторяется с переменной, которая не используется в теле цикла.

Вот краткое предложение:

for (NSDictionary *response in [status objectForKey:@"response"]) {
    NSString *firstName = [response objectForKey:@"first_name"];
    NSString *lastName = [response objectForKey:@"last_name"];
    [list_names addObject:[NSString stringWithFormat:@"%@, %@", last_name, first_name]];
}
NSLog(@"%@", list_names);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...