【问题标题】:NSURL with special characters (åäö)带有特殊字符的 NSURL (åäö)
【发布时间】:2012-04-11 12:57:30
【问题描述】:

我的服务器上有一些图像,以特殊字符 (å,ä,ö) 命名。我不知道如何转换 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);
 }

非常感谢任何建议, 在此先感谢

【问题讨论】:

  • 什么类型的网络服务器托管文件?阿帕奇?我假设当您将文件名放在 URL 栏中时,您的 Web 浏览器可以很好地获取它。您使用的是什么网络浏览器? (我问客户端和服务器问题的原因是我们可以调查每个默认使用的编码。)
  • 您好,感谢您的回复。是的,当我在浏览器中输入它时效果很好..它也可以在没有任何特殊字符的 NSURL 的 iPhone 上使用......它只是 NSURL 将特殊字符转换为导致问题的其他一些东西..
  • @BlackMouse 嗨,你找到解决办法了吗?
  • @BlackMouse 我遇到了同样的问题,我的应用程序大部分时间都在吃东西,任何帮助都将不胜感激!

标签: php iphone ios nsurl


【解决方案1】:

我认为这将完全取决于网络服务器使用的编码。

从您的测试来看,由于 ISO-Latin-1 似乎不起作用,您可以尝试将 kCFStringEncodingISOLatin1 替换为 kCFStringEncodingUTF8。

【讨论】:

    【解决方案2】:

    试试这个:

    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

    【讨论】:

    • 我刚刚用其他你可以尝试的东西编辑了答案
    • 谢谢.. 我试过了,但仍然得到错误的 url:Images/jag%E4rdator.png (如果名称是 jagärdator.png)
    • 日志的值是正确的:您正在记录编码字符串。但是,您的服务器应该理解这个编码的 url 并找到相应的图像。您的 NSData 是否正确创建?
    【解决方案3】:

    试试这个

    创建 NSURL

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

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

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

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,因为“%C3%89%C3%89”在我尝试加载的网址中转换为 ÉÉ。这似乎将 url 转换为所需的格式,以允许我从 URL 下载文件。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多