objective-c post 中文 问题【转】

今儿着实花了不少的时间来解决POST中文消息的问题. 调用OAMutableRequest的setHTTPBody方法设置中文后, 用fetcher时会产生一个错误. 经过长时间的debug, 最后终于发现是OAuthConsumer里的一个小的bug.
以下总结下原因:
我们假设要传送一个中文消息"使用OAuth发送博客", 我们需要:
NSString *string = @"使用OAuth发送博客";
NSData *body = [string dataUsingEncoding:NSUTF8StringEncoding]; //转换为NSData, utf8编码
[request setHTTPBody:body] //request是一个OAMutableURLRequest对象
[request setHTTPMethod:@"POST"]

在fetch时, OAMutableRequest需要调用_signatureBaseString方法来完成base string的准备工作. 在这中间, 他需要调用parameters这个方法. 问题就在这个方法中. 这个方法定义在类NSMutableURLRequest+Parameters.m中. 跟步调试的话, 我们会看到, 问题出在这句代码:
encodedParameters = [[NSString alloc] initWithData:[self HTTPBody] encoding:NSASCIIStringEncoding];
它将尝试将上面已经用utf8编码的内容用ascii编码读出来. 如果是中文字符串, 结果是nil, 如果是英文, 则不会有影响.
解决办法也很简单, 就是把这句中的NSASCIIStringEncoding改成NSUTF8StringEncoding
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值