我的服务器上有一些图像,以特殊字符(å,ä,ö)命名。我无法弄清楚如何转换NSUrl来获取它们:
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”=åäö):
.../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 :(得分:2)
我认为这完全取决于Web服务器正在使用的编码。
由于ISO-Latin-1似乎从您的测试到工作,您可能会尝试将kCFStringEncodingISOLatin1
替换为kCFStringEncodingUTF8
。
答案 1 :(得分: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
答案 2 :(得分:0)
试试这个
创建NSURL
NSURL *url = [[NSURL alloc]initWithString:stringURL];
stringURL是表示URL的字符串。记录时,试试这个
NSLog("%@",[url absoluteString]);
答案 3 :(得分:0)
我遇到了这个问题,因为“%C3%89%C3%89”在我试图加载的网址中转换为ÉÉ。这似乎将url转换为所需的格式,以允许我从URL下载文件。
NSURL *url = [NSURL URLWithString:[[imageURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];