Проверьте, содержит ли NSData кодировку ASCII или UTF8 - PullRequest
1 голос
/ 22 марта 2012

Я получаю HTML, содержащий текст в кодировке UTF8 или ASCII. Для наиболее распространенного использования это ASCII-декодирование, которое работает для отображения правильного текста:

NSString *responseString    =   [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

Теперь у меня есть другая HTML-страница с кодировкой UTF8, поэтому я должен использовать:

NSString *responseString    =   [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

Какая кодировка, которую я получаю, является случайной при загрузке веб-сайтов. У меня вопрос, есть ли способ проверить NSData для какого вида декодирования является правом использовать? Так что я знаю, какой тип кодировки мне нужно использовать.

Thnx!

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Я не знаю, возможно ли проверить кодировку NSData, вот что я сделал:

NSString *dataStr;
dataStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
if (!dataStr)
{
    NSLog(@"ASCII not working, will try utf-8!");
    dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
//Do stuff with dataStr
3 голосов
/ 23 марта 2012

Хотя ответ Heliem полезен, он не является решением, если ASCII и UTF8 возвращают обе строки. Например: UTF8 дает мне несколько дополнительных символов (отрицательный результат), а ASCII показывает правильные символы (положительный результат). Теперь я использую следующий код:

NSString *responseString, *responseStringASCII, *responseStringUTF8;

responseStringASCII = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
if (!responseStringASCII)
{
   // ASCII is not working, will try utf-8!

    responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
}
else
{
    //  ASCII is working, but check if UTF8 gives less characters

    responseStringUTF8  = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

    if(responseStringUTF8 != nil && [responseStringUTF8 length] < [responseStringASCII length])
    {
        responseString  =   [responseStringUTF8 retain];
    }
    else 
    {
        responseString  =   [responseStringASCII retain];
    }

    [responseStringUTF8 release];
}

[responseStringASCII release];
...