Подтвердить что ты не робот

Как использовать stringWithContentsOfURL: encoding: error:?

Я пытаюсь использовать initWithContentsOfURL: encoding: error: вот так:


NSURL *url = [[NSURL alloc] initWithString:@"http://my_url.com/my_file.xml"];
NSError *error = nil;
NSString *my_string = [[NSString alloc] initWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:&error];

Я получаю пустую переменную my_string.

Я попробовал метод initWithContentsOfURL: (который устарел в iOS 2.0), и я получаю содержимое своей страницы. Но мне еще нужно указать язык кодирования.

Что не так?

Спасибо:)

4b9b3361

Ответ 1

кодировка вашего файла, вероятно, не UTF8.

Если вы не знаете кодировку своего файла, вы можете попробовать этот метод:

- (id)initWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error

вам нужно передать указатель на NSStringEncoding, как вы сделали с ошибкой.:

NSURL *url = [[NSURL alloc] initWithString:@"http://my_url.com/my_file.xml"];
NSError *error = nil;
NSStringEncoding encoding;
//NSString *my_string = [[NSString alloc] initWithContentsOfURL:url
//                                                     encoding:NSUTF8StringEncoding
//                                                        error:&error];
NSString *my_string = [[NSString alloc] initWithContentsOfURL:url
                                                 usedEncoding:&encoding 
                                                        error:&error];

после этого ваша кодировка присутствует в переменной кодирования. Если вас не интересует используемая кодировка, я думаю, вы также можете передать NULL в качестве указателя.

Ответ 2

Почему бы не использовать запрос и соединение для получения информации обратно в объекте NSData? Что-то вроде этого:

NSURL *url = [[NSURL alloc] initWithString:@"http://my_url.com/my_file.xml"];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];
[request setHTTPMethod:@"GET"];

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

    [conn start];

if(conn){
    // Data Received
    responseData = [[NSMutableData alloc] init];
}

а затем в вашем соединении: метод делегирования didRecieveData, поставьте что-то вроде этого

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

[self.responseData appendData:data];
}

а затем, как только соединение завершится, загрузите данные в строку:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
     NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
}

Не самый простой метод, но он должен получить вашу XML-строку. Также, если вам нужно проанализировать XML, как только вы его вернете, вы можете напрямую передать responseData на NSXMLParser без какого-либо преобразования.:)

Ответ 3

Вы можете изменить свою веб-страницу, добавив header('Content-Type: text/html; charset=UTF-8'); в начало кода и сохраняя документ в виде форматированного файла UTF-8. Это помогло мне, поскольку у меня была та же проблема.