将 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
.
我有一个来自服务器的字符串,当我尝试将其转换为 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
.