我尝试将我的对象转换为json字符串,没有变音符号它的工作正常但是当我输入带有“ä”或“ü”的文本时我得到了这个错误:
ExceptionType = "System.ArgumentException";
Message = "Ein ung\U00fcltiges Objekt wurde \U00fcbergeben. Erwartet wurde \":\" oder \"}\".
这是我的代码:
-(Buchungsergebnis*)sendeBuchung:(NSString *)Buchung vomWebservice:(NSString *)WebServiceURL
{
//Erstellt einen Request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:WebServiceURL]];
[request setHTTPMethod: @"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *reqData = [NSData dataWithBytes:[Buchung UTF8String] length:[Buchung length]];
[request setHTTPBody:reqData];
NSURLResponse *response =[[NSURLResponse alloc]init];
NSError *error;
//Führt den Befehl aus
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (data ==nil)
{
NSLog(@"Login Error: %@",error);
return false;
}
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init ];
dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@",dic);
NSMutableDictionary *result = [[NSMutableDictionary alloc]init];
result = [dic objectForKey:@"d"] ;
Buchungsergebnis *ergebnis = [[Buchungsergebnis alloc]init];
ergebnis.result =[[result objectForKey:@"result"]boolValue];
ergebnis.message =[result objectForKey:@"message"];
return ergebnis;
}
这里是json:
{“thema”:“用变音符号测试\ n \nÖffnedietür”,“personenanzahl”:“4”,“vondatum”:“17.12.2013 09:00”,“veranstalteremail”:“asjgdl @dgs。 de“,”bisdatum“:”17.12.2013 10:30“,”dienstleistungen“:[],”teilnehmer“:[],”veranstaltertelefon“:”“,”veranstalter“:”blagojevic domenik“,”bestuhlungsid“: “377”, “benutzername”: “DBL”}
我该如何防止此错误?
答案 0 :(得分:4)
您的JSON有效(可在http://jsonlint.com上测试)。
但这有问题:
NSData *reqData = [NSData dataWithBytes:[Buchung UTF8String] length:[Buchung length]];
因为[Buchung length]
返回字符串中的(Unicode)字符的数量,
这与非ASCII字符(如变音符号)的UTF-8 字节的数量不同。
更好地使用
NSData *reqData = [Buchung dataUsingEncoding:NSUTF8StringEncoding];
或者使用NSJSONSerialization
创建JSON,它会为您提供NSData
个对象
而不是字符串。
您可能还必须明确设置HTTP Content-length,我不确定是否这样 是必要的:
[request setValue:[NSString stringWithFormat:@"%d", [reqData length]] forHTTPHeaderField:@"Content-Length"];
答案 1 :(得分:0)
尝试使用: [NSJSONSerialization JSONObjectWithData:数据选项:NSJSONReadingMutableLeaves错误:& error]; (使用NSJSONReadingMutableLeaves而不是kNilOptions)
我正在使用包含中文,西班牙语,印地语的数据。它对我来说很好。