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