簡體   English   中英

發送utf-8時的響應500

[英]Response 500 when sending utf-8

當我使用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 POST的方式:

    - (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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM