首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >发送utf-8时响应500

发送utf-8时响应500
EN

Stack Overflow用户
提问于 2012-05-16 17:43:17
回答 2查看 150关注 0票数 0

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

代码语言:javascript
运行
复制
- (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帖子的方式:

代码语言:javascript
运行
复制
    - (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服务的外观:

代码语言:javascript
运行
复制
    ....    
[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)]
EN

Stack Overflow用户

回答已采纳

发布于 2012-05-16 20:52:07

这一行:

代码语言:javascript
运行
复制
self.responseData = [NSData dataWithBytes:[json UTF8String] length:[json length]];

是不正确的。NSString的长度是UTF-16字符,而不是UTF-8字符。

代码语言:javascript
运行
复制
const char* utf8 = [json UTF8String];
self.responseData = [NSData dataWithBytes:utf8 length:strlen(utf8)];

但更好的方法是让字符串直接创建NSData,而不是通过C样式的字符串。

代码语言:javascript
运行
复制
self.responseData = [json dataUsingEncoding:NSUTF8StringEncoding];
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10615940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档