将 NSString 转换为 NSDictionary 错误

Convert NSString to NSDictionary bug

我有一个来自服务器的字符串,当我尝试将其转换为 NSDictionary - 我得到“nil”。当我尝试自己写同样的 NSString - 没关系!

我从服务器获取编码字符串,然后我使用来自 NSString+AESCrypt.h 的 "AES256DecryptWithKey" 解密,并获取 NSString,我将此字符串转换为 NSData 然后尝试获取 NSDictionary

NSString *str = @"{\"error\":{\"password\":[\"Error wrong!\"]}}"; //string written by myself

NSData *jsonData = [str dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData
                                                         options:kNilOptions
                                                           error:&error];

此代码有效,但后来我从服务器获取此字符串 - 不是(

NSData log (message from server) - <7b226572 726f7222 3a7b2270 61737377 6f726422 3a5b22d0 9dd0b5d0 bfd180d0 b0d0b2d0 b8d0bbd1 8cd0bdd1 8bd0b920 656d6169 6c20d0b8 d0bbd0b8 20d0bfd0 b0d180d0 bed0bbd1 8c225d7d 7d000000>

NSData log (my string) - <7b226572 726f7222 3a7b2270 61737377 6f726422 3a5b22d0 9dd0b5d0 bfd180d0 b0d0b2d0 b8d0bbd1 8cd0bdd1 8bd0b920 656d6169 6c20d0b8 d0bbd0b8 20d0bfd0 b0d180d0 bed0bbd1 8c225d7d 7d>

如果我来自服务器的 NSLog 字符串,它 - {"error":{"password":["Error wrong!"]}} ,字符串不带“\”

那我"po &error.localizedDescription"- 错误:请求 属性 表达式的地址 错误:1 个错误解析表达式

Then i "po error.localizedDescription" - 打印错误说明: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"(最后是垃圾。)UserInfo=0x7f9940497550 {NSDebugDescription=最后是垃圾。}

可以是什么??

错误消息说:

Garbage at end.

因此,比较您的数据和来自服务器的数据,我们看到:

Test string data:
<7b226572 726f7222 3a7b2270 61737377
 6f726422 3a5b22d0 9dd0b5d0 bfd180d0
 b0d0b2d0 b8d0bbd1 8cd0bdd1 8bd0b920
 656d6169 6c20d0b8 d0bbd0b8 20d0bfd0
 b0d180d0 bed0bbd1 8c225d7d 7d>

Server data:
<7b226572 726f7222 3a7b2270 61737377
 6f726422 3a5b22d0 9dd0b5d0 bfd180d0
 b0d0b2d0 b8d0bbd1 8cd0bdd1 8bd0b920
 656d6169 6c20d0b8 d0bbd0b8 20d0bfd0
 b0d180d0 bed0bbd1 8c225d7d 7d000000>

解码后的数据多了3个字节。也许它是在加密之前填充的,或者由于某些填充参数而作为解密的结果。作为解决方法,您可以删除杂散的 000000.