代码之家  ›  专栏  ›  技术社区  ›  Mike A

编码问题:可可错误261?

  •  20
  • Mike A  · 技术社区  · 16 年前

    因此,我从iPhone应用程序中的一个php脚本中获取一个json字符串,使用:

    NSURL *baseURL = [NSURL URLWithString:@"test.php"];
    NSError *encodeError = [[NSError alloc] init];
    NSString *jsonString = [NSString stringWithContentsOfURL:baseURL encoding:NSUTF8StringEncoding error:&encodeError];
    NSLog(@"Error: %@", [encodeError localizedDescription]);
    NSLog(@"STRING: %@", jsonString);
    

    当我测试输出时,JSON字符串会验证。现在我有一个编码问题。当我取一条回音线时,如:

    { "testKey":"é" }
    

    JSON解析器工作正常,我可以创建一个有效的JSON对象。但是,当我获取2MB JSON字符串时,会得到:

    Error: Operation could not be completed. (Cocoa error 261.)
    

    和一个空字符串。我的php文件本身就是utf8,我没有使用utf8_encode(),因为这似乎对数据进行了双重编码,因为我已经将数据作为nsutf8stringencoding进行了提取。不管怎样,在我的单一echo测试中,它允许我在构建JSON对象时成功地记录\asdas样式的utf8转义。

    在较大字符串的情况下,什么可能导致错误?

    另外,我不确定是否会有什么不同,但是我正在对解析后的PHP数据使用php函数addslashes(),以便在构建JSON字符串时考虑引号等。

    5 回复  |  直到 10 年前
        1
  •  19
  •   Olie    12 年前

    不知道这是不是你的问题,但我有一个类似的东西(StringWithContentsOfFile,没有JSON),问题是文件有CRLF(Windows)行结尾和WESTERN,不管它是什么编码。我使用SubethaEdit转换为LF(mac/unix行尾)和UTF-8编码,现在一切正常。

        2
  •  27
  •   Community Mohan Dere    9 年前

    我很惊讶没有人提到在调用[nsString StringWithContentsOfFile:Encoding:Error:]时使用不同的编码值而不是nsutf8StringEncoding。

    在解析JSON文件时,我还得到了cocoa错误261。我刚刚浏览了 NSString encodings 直到其中一个成功。幸运的是,第一个为我工作:NSASciistringingCoding!

    您也可以使用 NSString stringWithContentsOfFile:usedEncoding:error: 要尝试找到正确的编码(如下所述: How to use stringWithContentsOfURL:encoding:error:? )

        3
  •  5
  •   yunas    14 年前

    编码问题:可可错误261? 我通过尝试不同的编码解决了这个问题。首先我用的是nsutf8然后我 切换到NSASciistringingCoding,它工作了 .

    NSString* path = [[NSBundle mainBundle] pathForResource: @"fileName" ofType: @"type"];
    NSData* data = [NSData dataWithContentsOfFile:path];
    NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"%@",string);
    
        4
  •  0
  •   martinr    16 年前

    为了将来的参考,如果您需要重写编码,并且您使用的是没有嵌入nuls的流,那么这样做可能很好(我刚刚在这里编写了一个粗略的草图大纲,请检查此代码是否是,并且在使用它之前是否希望您这样做):

    NSHTTPURLResponse* resp=nil;
    NSData* jsonAsImmutableData = [NSURLConnection sendSynchronousRequest:
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://<whatever>"]]
      returningResponse:&resp error:NULL];
    
    NSMutableData*modifiedData = [NSMutableData dataWithData:jsonAsImmutableData];
    
    char extraNulls[7] =
      {0,0,0,0,0,0,0}; // is this defensive enough for your encoding?
    [modifiedData appendBytes:extraNulls length:7];
    
    NSString* jsonAsString = [NSString stringWithCString:[modifiedData bytes]
      encoding:<whatever your encoding is>];
    

    但我希望您最好的做法是检查您的服务器是否同时使用并声称使用UTF-8编码或其他支持苹果iPhone的编码。

    编辑

    修改了代码注释。

        5
  •  0
  •   Alberto M    15 年前

    帮助我的只是将物理文件编码改为UTF-8。我的编辑把它设为默认值,Macroman,不喜欢有重音的字母。