2016-05-24 4 views
0

У меня есть некоторые фрагменты данных, которые закодированы со случайными методами, скажем, первый фрагмент закодирован NSUTF8StringEncoding другим с NSASCIIStringEncoding или kCFStringEncodingWindowsArabic.Получить тип кодировки NSData

Я не знаю, какой блок закодирован с каким типом кодирования. Я попробовал несколько вариантов, например. если результат равен нулю, то декодировать с NSNonLossyASCIIStringEncoding, но безрезультатно. Есть ли способ определить конкретный кусок данных, закодирован с типом кодирования?

Любая помощь будет оценена по достоинству.

+2

Этот механизм кодирования сломан. Нет идеального решения вашей проблемы. – trojanfoe

+1

Если вы извлекаете данные с помощью WebService, заголовки ответов могут дать вам подсказку о кодировке в значении «Charset». – Larme

+0

@ Larme Хорошее предложение, но я не получаю данные из WebService. –

ответ

0

Вы можете найти ответ на свой вопрос здесь: https://stackoverflow.com/a/9836989/2923506

Это копия & код паста адаптирована к АРК пользователя MiiChiel, потому что это хороший ответ. «если 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]; 
    } 

} 

Я надеюсь, что это может помочь вам.

+0

Я уже проверил, что есть количество кодировок там, как вы думаете, это приемлемое решение? –

+0

Получил. Я бы сказал, что есть эвристический ответ на ваш вопрос, но я не думаю есть нечеткое решение. –

+0

Будем надеяться, что я получу то, что хочу, или мне придется написать очень длинный сценарий :( –

Смежные вопросы