与德国变音符号的NSJSONSerialization异常

时间:2013-12-09 07:56:58

标签: ios json nsjsonserialization

我尝试将我的对象转换为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”}

我该如何防止此错误?

2 个答案:

答案 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)

我正在使用包含中文,西班牙语,印地语的数据。它对我来说很好。