C# 发送utf-8时的响应500

C# 发送utf-8时的响应500,c#,objective-c,ios,asp.net-mvc-3,C#,Objective C,Ios,Asp.net Mvc 3,当我使用utf-8特殊字符(如“Ö”)向我的web服务发送请求时,它返回响应500“处理请求时出错”。这是我在iOS应用程序中登录的内容 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSError *error = nil; dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:self.responseD

当我使用utf-8特殊字符(如“Ö”)向我的web服务发送请求时,它返回响应500“处理请求时出错”。这是我在iOS应用程序中登录的内容

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{    
    NSError *error = nil;

    dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:self.responseData error:&error];
    for (id key in dict) {
        NSLog(@"%@=%@", key, [dict objectForKey:key]);
    }
如果我只用简单的英语发送消息,效果很好

我不确定错误是在服务器端还是在应用程序本身。 以下是我发送JSON帖子的方式:

    - (void)stringWithUrl:(NSURL *)url jsonReq:(NSString *)json{

    self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
    self.responseData = [NSData dataWithBytes:[json UTF8String] length:[json length]];


    [self.requestURL setHTTPMethod:@"POST"];
    [self.requestURL setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [self.requestURL setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [self.requestURL setValue:@"application/json" forHTTPHeaderField:@"UTF-8"];
    [self.requestURL setValue:[NSString stringWithFormat:@"%d", [self.responseData length]] forHTTPHeaderField:@"Content-Length"];
    [self.requestURL setHTTPBody: self.responseData];
这就是web服务的外观:

    ....    
[WebService(Namespace = "http://mypage.com/webservicesF")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX,
    [System.Web.Script.Services.ScriptService]
.....
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

发送前尝试编码,如:

    NSString *strEncode =  [src stringByAddingPercentEscapesUsingEncoding:NSUnicodeStringEncoding];
这一行:

self.responseData = [NSData dataWithBytes:[json UTF8String] length:[json length]];
这是不正确的。
NSString
的长度是UTF-16字符,而不是UTF-8字符。你可以这样做:

const char* utf8 = [json UTF8String];
self.responseData = [NSData dataWithBytes:utf8 length:strlen(utf8)];
但是更好的方法是让字符串直接创建
NSData
,而不需要经过C样式的字符串

self.responseData = [json dataUsingEncoding:NSUTF8StringEncoding];