Кодировка NSData в NSString возвращает бред - PullRequest
0 голосов
/ 30 марта 2012

Я загружаю html-страницы через NSURLConnection, который в конце дает мне представление NSData html-страницы. Мне нужно преобразовать эти NSData в NSString, чтобы разобрать его. Моя проблема в том, что на этой странице используются специальные символы, такие как «š č ř ž ý á í í é» и т. Д., И когда я преобразую NSData в NSString, я получаю некоторую натуру, например, «–– ¬» вместо «í» и т. Д. Я знаю, что проблема с кодировкой, но я понятия не имею, как решить эту проблему ... Я не знаю много о кодировании, но я обнаружил, что сайт использует utf-8 (и эти символы в чешском языке), так что я ' Я действительно в тупике ...

Вот мой код:

NSString* docHTML = [[NSString alloc] initWithBytes: [self.receivedData bytes] length:[self.receivedData length] encoding: NSUTF8StringEncoding];

Спасибо за любую помощь

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Ваша веб-страница, вероятно, не кодирует свое содержимое в UTF-8. Вам необходимо использовать ту же кодировку, что и на веб-странице.

РЕДАКТИРОВАТЬ: также обратите внимание, что receivedBytes не действует, пока соединение не будет завершено. Вы не можете конвертировать данные в строки в середине didReceiveData.

В качестве примечания, для этого проще использовать initWithData:encoding:.

0 голосов
/ 30 марта 2012

Вы можете попробовать что-то вроде:

NSString *docHTML;
docHTML = [[NSString alloc] initWithData:self.receivedData encoding:NSASCIIStringEncoding]; 
if (!docHTML)
{
    NSLog(@"ASCII not working, will try utf-8!");
    docHTML = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];
}
//Do stuff with docHTML

Удачи!

...