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, в основном это происходит, когда строка содержит большие данные.

У кого-нибудь есть идея, почему это происходит?

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-строки. В противном случае преобразование не имеет ни малейшего смысла.

Другие вопросы по тегам