NSString возвращает NULL при выполнении NSUTF8StringEncoding

Ниже приведен мой код

NSString *res = [valueArray valueForKey:@"key"];
NSData *newdata=[res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
res=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
nameTxt.text = [NSString stringWithFormat:@"%@",res]; // Assigning to textfield

это работает правильно. Но иногда он возвращает данные NULL, в основном это происходит, когда строка содержит большие данные.

Кто-нибудь знает, почему это происходит?


person Nikhil Thakkar    schedule 26.02.2013    source источник
comment
Xcode возвращает NULL? Как оно это делает? И что этот код должен делать, кроме кажущегося бессмысленным преобразования строки -> данных -> строки?   -  person trojanfoe    schedule 26.02.2013
comment
в текстовом поле иногда отображается (нулевое) значение, я не знаю почему. если вы знаете, дайте мне знать @trojanfoe.   -  person Nikhil Thakkar    schedule 26.02.2013
comment
А что произойдет, если вы сделаете nameTxt.text = [valueArray valueForKey:@"key"];?   -  person trojanfoe    schedule 26.02.2013
comment
Пользуетесь ли вы каким-либо сервисом с этим кодом?   -  person Ganapathy    schedule 26.02.2013
comment
он показывает мне данные с юникодами, но для преобразования юникодов в эмодзи я использую этот код. @trojanfoe   -  person Nikhil Thakkar    schedule 26.02.2013
comment
когда я отправляю на сервер, я использовал этот код NSData *data = [nameTxt.text dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *str = [[NSString alloc] initWithData: кодировка данных: NSUTF8StringEncoding]; [req setPostValue:str forKey:@key];   -  person Nikhil Thakkar    schedule 26.02.2013


Ответы (1)


NSString *res = [valueArray valueForKey:@"key"];

Забавно: использование valueForKey: для переменной с именем ...Array. Вернее, кажется, словарь?

NSData *newdata = [res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

создание необработанных данных в кодировке UTF8 из строки всегда работает: нет необходимости в allowLossyConversion.

res = [[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];

Преобразование необработанных данных в кодировке UTF8 в ASCII работает только в том случае, если UTF8 не содержит символов из очень ограниченного диапазона ASCII. В противном случае возвращается nil.

Кажется, это единственная причина этого запутанного фрагмента кода: фильтрация строк, отличных от ASCII. В противном случае преобразование не имеет ни малейшего смысла.

person Nikolai Ruhe    schedule 26.02.2013
comment
Скорее всего: код скопирован откуда-то без понимания. - person gnasher729; 11.03.2016
comment
И по стечению обстоятельств я нашел пост, в котором кто-то делал эту ерунду с явной целью как-то правильно обрабатывать смайлики. Что, конечно, совершенно бессмысленно. - person gnasher729; 11.03.2016