Конвертировать строку Юникода в utf8 - PullRequest
0 голосов
/ 26 апреля 2011

Когда я получаю строку вида \ u043F \ u043F (Unicode), как мне преобразовать ее в читаемую строку NSUT8String?Вот мой код (который не работает, когда это не английские символы):

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    NSString *theStr = [[NSString alloc]  initWithBytes:[receivedData bytes]
                                                  length:[receivedData length] encoding: NSUTF8StringEncoding];

    NSLog(theStr);
}

Когда строка в английских символах, все в порядке - но когда она в формате Unicode, она не дает мне читабельную строку(но остается в формате Unicode).

Что вы думаете?


РЕДАКТИРОВАТЬ:

Я понял, что не дал достаточно информации о том, что я 'Я пытаюсь сделать.Я пытаюсь использовать способ получения автоматически предложенных ключевых слов в youtube, когда вы используете окно поиска (ничего официального, просто использовал перехватчик, чтобы выяснить это).Вот оно:

http://suggestqueries.google.com/complete/search?hl=en&client=youtube&hjson=t&ds=yt&jsonp=window.yt.www.suggest.handleResponse&q=*******&cp=******

q - ваш запрос, а cp - длина q.

Так что в основном, когда q - это что-то на английском языке, все работает нормально.Но когда q содержит не английские символы (например, русский), это то, что я получаю (из NSLog):

window.yt.www.suggest.handleResponse(["\u043F\u0440",[["\u043F\u0440\u0438\u043A\u043E\u043B\u044B","","0"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D","","1"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 87","","2"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 88","","3"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 86","","4"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 85","","5"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 89","","6"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 84","","7"],["\u043F\u0440\u0438\u043A\u043E\u043B\u044B \u0432 \u043F\u0440\u044F\u043C\u043E\u043C \u044D\u0444\u0438\u0440\u0435","","8"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 90","","9"]],{}])

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Вы можете использовать:

@interface NSString 
{
     - (__strong const char *)UTF8String;  // Convenience to return
                                           // null-terminated UTF8 representation
}
0 голосов
/ 19 августа 2011

Я думаю, что это может помочь ..

NSString *yourString = "\u043F\u0440\u0438\u043A\u043E\u043B\u044B";
NSArray *unicodeArray = [yourString componentsSeparatedByString:@"\\u"];
NSMutableString *finalString = [[NSMutableString alloc] initWithString:@""];
for (NSString *unicodeString in unicodeArray) {
    if (![unicodeString isEqualToString:@""]) {
        unichar codeValue;
        [[NSScanner scannerWithString:unicodeString] scanHexInt:&codeValue];
        NSString* betaString = [NSString stringWithCharacters:&codeValue length:1]; 
        [finalString appendString:betaString];
    }
} 
//finalString should have encoded one
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...