【问题标题】:NSData to NSString encoding returns gibberishNSData 到 NSString 编码返回乱码
【发布时间】:2012-04-13 13:57:42
【问题描述】:

我正在通过 NSURLConnection 下载 html 页面,它最后为我提供了 html 页面的 NSData 表示。我需要将此 NSData 转换为 NSString 才能解析它。我的问题是这个页面使用了特殊字符,如“ě š č ř ž ý á á í é”等,当我将 NSData 转换为 NSString 时,我得到一些像“–ì¬≠”这样的 jibrish 而不是“í”等。我知道问题出在编码上,但我不知道如何解决这个问题......我对编码知之甚少,但我发现该网站使用 utf-8(这些字符是捷克语),所以我我真是死路一条……

这是我的代码:

NSString* docHTML = [[NSString alloc] initWithBytes: [self.receivedData bytes] length:[self.receivedData length] encoding: NSUTF8StringEncoding];

感谢您的帮助

【问题讨论】:

    标签: ios encoding nsstring nsdata


    【解决方案1】:

    你可以试试这样的:

    NSString *docHTML;
    docHTML = [[NSString alloc] initWithData:self.receivedData encoding:NSASCIIStringEncoding]; 
    if (!docHTML)
    {
        NSLog(@"ASCII not working, will try utf-8!");
        docHTML = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];
    }
    //Do stuff with docHTML
    

    祝你好运!

    【讨论】:

    • 或者只是从响应的 HTTP 标头字段中解析编码。
    【解决方案2】:

    您的网页可能未将其内容编码为 UTF-8。您需要使用与网页相同的编码。

    编辑:还要注意receivedBytes 在连接完成之前无效。在 didReceiveData 中间不能将数据转换成字符串。

    附带说明,为此使用initWithData:encoding: 更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 2013-11-27
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多