Как использовать 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), и я получаю содержимое своей страницы. Но мне еще нужно указать язык кодирования.
Что не так?
Спасибо:)
Ответы
Ответ 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. Это помогло мне, поскольку у меня была та же проблема.