如何使用stringWithContentsOfURL:encoding:error:?

时间:2010-10-22 09:29:49

标签: iphone objective-c cocoa-touch

我正在尝试使用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中已弃用),我得到了我的页面内容。但我仍然需要指定一种编码语言。

怎么了?

谢谢:)

3 个答案:

答案 0 :(得分:33)

您的文件的编码可能不是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作为指针。

答案 1 :(得分:3)

为什么不使用请求和连接来获取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后解析XML,则可以直接将responseData传递给NSXMLParser而无需任何转换。 :)

答案 2 :(得分:-1)

您可以通过将header('Content-Type: text/html; charset=UTF-8');添加到代码顶部并将文档另存为UTF-8格式文件来修改您的网页。它帮助了我,因为我有同样的问题。