我正在尝试使用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中已弃用),我得到了我的页面内容。但我仍然需要指定一种编码语言。
怎么了?
谢谢:)
答案 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格式文件来修改您的网页。它帮助了我,因为我有同样的问题。