RS客户端POST方法和特殊字符

时间:2012-03-16 10:02:49

标签: ios restkit

我面临一种奇怪的行为。我使用以下代码发送HTTP 使用POST方法请求服务器

[[RKClient sharedClient] post:[NSString stringWithFormat:@"api"]
                           params:aDict
                         delegate:self];

保存值的字典如下:

NSDictionary *comment = [NSDictionary dictionaryWithObjects:[NSArray
arrayWithObjects:@"wallcomment", [self.wall
valueForKey:@"wallMessageId"], [self.textView text], nil]
                                                        forKeys:
[NSArray arrayWithObjects:@"a01call", @"a01wall_message_id",
@"a01comment", nil]];

当[self.textView text]填充带有重音的法语单词时 服务器收到错误的编码:“Test @vérification caractèresspéciaux“

我不会在发布之前操纵textview文本,因此编码也是UTF8。

当我检查POST标头时,内容类型没有编码类型。我尝试使用以下方法添加它,但它没有添加:

- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)header

我在文档中没有看到的任何特殊方法或属性?

我正在使用RestKit 0.9.3

1 个答案:

答案 0 :(得分:2)

这样做:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"api" delegate:self block:^(RKObjectLoader *loader) {
    [loader setAdditionalHTTPHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"application/x-www-form-urlencoded;charset=UTF-8", @"Content-Type", nil]];
}];

如果您需要,请不要忘记添加其他标题。

我在浏览RestKit代码时注意到的另外一件事,即RKObjectManager第222行:

loader.method = RKRequestMethodGET;

所以不要惊讶你的方法是GET,而不是POST。如果你真的需要POST(我认为你没有),那么改变块中的方法。