isEqualToString为相同的字符串返回false?

时间:2014-11-20 21:12:55

标签: ios objective-c

也许我疯了,但我似乎无法理解为什么isEqualToString在这种情况下返回false。

我编写了以下方法来解码来自百分比编码的URL的字符串:

-(NSString*) decodeFromURLSafe: (NSString*) urlToDecode{
    NSString *safeUrl = [urlToDecode stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    safeUrl = [safeUrl stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    return safeUrl;
}

在实践中它可行,但我为它写了一些测试,并且不明白为什么它们失败

这是一个这样的测试:

-(void)testDecodingFromURLSafe{
    NSString *unescapedString = @"@a!b*c(d)e;f:g&h=i+j$k,l/m#n\\p[q]r<s>t^u{v}w|x~y";
    NSString *answer = [_viewController decodeFromURLSafe:@"%40a%21b%2Ac%28d%29e%3Bf%3Ag%26h%3Di%2Bj%24k%2Cl%2Fm%23n%5C%5Cp%5Bq%5Dr%3Cs%3Et%5Eu%7Bv%7Dw%7Cx%7Ey"];
    NSLog(@"%@", answer);
    NSLog(@"%d", [answer isEqualToString:@"@a!b*c(d)e;f:g&h=i+j$k,l/m#n\\p[q]r<s>t^u{v}w|x~y"]);
    XCTAssert([answer isEqualToString:unescapedString], @"decoding works");
}  

第二个NSLog语句中的字符串直接从第一个输出中复制:

2014-11-20 14:03:46.352 ProjName[5573:60b] @a!b*c(d)e;f:g&h=i+j$k,l/m#n\\p[q]r<s>t^u{v}w|x~y

但两次比较都是假的,我对我所缺少的东西感到困惑。 我已经尝试将字符串放入DiffNow中以仔细检查它们是否相同而且仍然没有。

1 个答案:

答案 0 :(得分:6)

你需要加倍你的反斜杠,以便它们正确地逃脱:

@a!b*c(d)e;f:g&h=i+j$k,l/m#n\\\\p[q]r<s>t^u{v}w|x~y