Зашифрованный твиттер - PullRequest
       16

Зашифрованный твиттер

3 голосов
/ 12 февраля 2012

Я занимаюсь разработкой приложения для iOS, которое займет твиттер, Я использую следующее API

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&count=2&screen_name=TareqAlSuwaidan

Проблема в подаче на арабском языке, то есть текстовая лента выглядит так

u0646 \ u0643

Как я могу получить реальный текст (или как его кодировать, чтобы получить реальный текст)?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

Это не зашифровано, это Unicode.Коды 0600 - 06ff - арабский.NSString обрабатывает юникод.

Вот пример:

NSString *string = @"\u0623\u0646\u0643 \u0648\u0627\u0647\u0645";
NSLog(@"string: '%@'", string);

Вывод NSLog:

строка: 'أنك واهم'

Единственный вопрос, какую именно проблему вы видите, получаете ли вы арабский текст?Вы используете NSJSONSerialization для десериализации JSON?Если это так, проблем быть не должно.

Вот пример с URL-адресом вопроса (не используйте синхронные запросы в производственном коде):

NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&count=2&screen_name=TareqAlSuwaidan"];
NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error;
NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSDictionary *object1 = [jsonObject objectAtIndex:0];
NSString *text = [object1 objectForKey:@"text"];
NSLog(@"text: '%@'", text);

Вывод NSLog:

text: '@Naser_Albdya أيدت الثورة السورية منذ بدايتها وارجع لليوتوب واكتب( سوريا السويدان )
0 голосов
/ 12 февраля 2012

Это литералы Unicode.Я думаю все, что нужно, это использовать NSString метод stringWithUTF8String: для вашей строки.Это должно использовать нативную обработку Unicode NSString для преобразования литералов в фактические символы.Пример:

NSString *directFromTwitter = [twitterInterface getTweet];
// directFromTwitter contains "\u0623\u0646\u0643 \u0648\u0627\u0647\u0645"
NSString *encodedString = [NSString stringWithUTF8String:[directFromTwitter UTF8String]];
// encodedString contains "أنك واهم", or something like it

Вызов метода внутри вызова преобразования ([directFromTwitter UTF8String]) должен получить доступ к необработанным байтам строки, которые используются stringWithUTF8String.Я не совсем уверен в том, к чему приводят эти кодовые точки, я просто использовал Python для выполнения преобразования.

...