今儿着实花了不少的时间来解决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
分享到:
相关推荐
本压缩包"IOS应用源码之【类库与框架】-Core Text Objective-C Wrapper.rar"提供了与Core Text相关的Objective-C封装,使得开发者能够更方便地在iOS应用中利用Core Text的功能。Core Text是Apple的文本处理框架,...
在Swift、JavaScript以及Objective-C之间进行交互是一种常见的需求,特别是在混合式移动应用开发中。这个主题,"swift-JS-OC交互相互传递参数里面差不多都换成中文了",旨在探讨如何在这些不同的编程语言间有效地...
NeXTStep基于Unix(BSD),使用PostScript提供高质量图形界面,并通过Objective-C语言支持面向对象编程。 - **转型与发展**: 1994年,NeXT与Sun Microsystems合作推出了OpenStep接口,目标是创建一个跨平台的面向...
ReactiveCocoa简称RAC,就是基于响应式编程思想的Objective-C实践,它是Github的一个开源项目,你可以在这里找到它。 采用MKNetworkKit 网络框架,修改了部分功能,底层支持网络缓存,轻松控制是否启用缓存。 ...
Doxygen是可用于C++、 C、 Java、 Objective-C、 Python、 IDL (Corba 和 Microsoft flavors)以及部分PHP、 C#和 D语言的文档系统。 它能通过以下三种方式帮助你: 1,它能从一系列源文件中生成在线浏览文档...
学习Objective-C的基础知识,如消息传递机制、类别(Class)、协议(Protocol)和Category,对于阅读和理解这些代码库至关重要。 iOS应用通常由多个视图(View)和控制器(Controller)组成,这些构成了所谓的MVC(Model-...
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。Doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF...
C , CSS, Pascal, Perl, Python, Lua, TCL, Assembler, Ruby, Lisp, Scheme, Properties, Diff, Smalltalk, Postscript 及 VHDL. 打印所见即所得(WYSIWYG) ,如果你有彩色打印机,你可以把你的原始码以多种颜色...
NSURLConnection是iOS开发中用于处理HTTP网络请求的重要组件,它基于Objective-C,是Apple的Foundation框架的一部分。在iOS应用开发中,我们常常需要通过网络获取数据,如JSON、XML或者图片,NSURLConnection提供了...
- **编程基础**:熟悉至少一种编程语言,推荐Objective-C或Swift。 - **操作系统**:Mac OS X环境下的操作能力。 - **工具使用**:掌握Xcode的使用方法。 2. **基础知识**: - **iOS框架**:了解UIKit、...
它的设计遵循了Objective-C的Blocks和Category特性,使得代码更加简洁易读。 快速使用AFNetworking通常分为以下几个步骤: 1. **引入库**:在项目中导入AFNetworking库,可以通过CocoaPods或者手动添加依赖。 2. ...
- 当前主流的移动开发平台有iOS(使用Swift或Objective-C)、Android(使用Java或Kotlin)以及跨平台解决方案(如Flutter、React Native等)。 2. **跨平台框架的优势**: - 跨平台框架允许开发者使用单一代码库...
batch file Javascript ASP VB/VBS SQL Objective-C RC resource file Pascal Perl Python Lua TeX TCL Assembler Ruby Lisp Scheme Properties Diff Smalltalk Postscript VHDL Ada Caml AutoIt KiXtart Matlab ...
batch file Javascript ASP VB/VBS SQL Objective-C RC resource file Pascal Perl Python Lua TeX TCL Assembler Ruby Lisp Scheme Properties Diff Smalltalk Postscript VHDL Ada Caml AutoIt KiXtart Matlab...
batch file Javascript ASP VB/VBS SQL Objective-C RC resource file Pascal Perl Python Lua TeX TCL Assembler Ruby Lisp Scheme Properties Diff Smalltalk Postscript VHDL Ada Caml AutoIt KiXtart Matlab...
由于server一开始并不支持emoji,现在你post含有emoji的数据到server,server会出现异常,主要是server的mysql开始的时候没有定义4位的字段,varchar都是3位的(普通的字符串或者表情都是占位3个字节,所以utf8足够用...