2012-04-11 65 views
2

我有我的服务器上的一些图片,有特殊字符命名的(A,A,O)。我无法弄清楚如何将NSURL转换,让他们:NSURL有特殊字符(AAO)

NSString *urlString = [NSString stringWithFormat: @".../Images/%@Image.png", playerName]; 

    NSURL *url = [NSURL URLWithString: [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

    NSLog(@"url:%@", url); 

    //Get the image and assign it to the player 
    NSData *imageData = [NSData dataWithContentsOfURL:url]; 
    UIImage *image = [UIImage imageWithData:imageData]; 

日志在上面的例子(如“playerName” = AAO):

.../Images/%C3%A5%C3%A4%C3%B6Image.png 

,但我需要它:

.../Images/åäöImage.png 

我尝试不同(stringByAddingPercentEscapesUsingEncoding)和下面的代码没有成功:

- (NSString *)URLEncodingOfString:(NSString *)s 
{ 
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes 
(kCFAllocatorDefault, (__bridge CFStringRef)s, NULL, NULL, 
kCFStringEncodingISOLatin1); 
} 

任何意见非常赞赏, 在此先感谢

+0

什么类型的Web服务器主机的文件? Apache的?当您将文件名放入URL栏时,我假设您的Web浏览器可以正常读取它。你使用什么网络浏览器? (我之所以要求在客户端和服务器的问题是,使我们可以调查由默认的编码是什么每个人使用。) – sblom 2012-04-11 13:03:22

+0

嗨,答复表示感谢。是啊,当我在浏览器中键入它的作品不错..而且它也从与NSURL iphone的工作没有任何特殊字符...这只是NSURL特殊字符转换为引起该问题一些其他的东西.. – BlackMouse 2012-04-11 13:23:42

+0

@BlackMouse嗨,你有没有找到任何解决方案? – 2014-07-28 07:35:26

回答

2

我认为这将完全取决于什么编码的Web服务器使用。

由于ISO-Latin-1在您的测试中似乎没有起作用,因此您可以尝试用kCFStringEncodingUTF8替换kCFStringEncodingISOLatin1

+0

谢谢,但它没有工作:( – BlackMouse 2012-04-11 13:28:28

1

试试这个:

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL, 
    (CFStringRef)unencodedString, 
    NULL, 
    (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
    kCFStringEncodingISOLatin1); 

不幸的是,stringByAddingPercentEscapesUsingEncoding方法不正确编码所有特殊字符。

来源:How to really URL encode an NSString in Objective-C, iPhone, etc.

编辑:

你试过

NSString *urlString = [NSString stringWithFormat: @".../Images/%@Image.png", playerName]; 

NSURL *url = [NSURL URLWithString: [urlString stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]]; 

NSISOLatin1StringEncoding代替NSUTF8StringEncoding

+0

谢谢,但它没有工作:( – BlackMouse 2012-04-11 13:28:51

+0

我刚刚编辑答案与其他东西,你可以尝试 – Mutix 2012-04-11 13:33:47

+0

谢谢..我试过了,仍然得到了错误的网址: Images/jag%E4rdator.png(如果名字是jagärdator.png) – BlackMouse 2012-04-11 13:52:33

0

的尝试这个

创建NSURL

NSURL *url = [[NSURL alloc]initWithString:stringURL]; 

stringURL是表示URL的字符串。虽然记录,试试这个

NSLog("%@",[url absoluteString]); 
0

我就遇到了这个问题,由于“%C3%89%C3%89”,它转换成一个网址,我尝试加载内EE。这似乎将网址转换为所需的格式,以允许我从URL下载文件。

NSURL *url = [NSURL URLWithString:[[imageURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];