`
zheyiw
  • 浏览: 1015282 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    IOS应用源码之【类库与框架】-Core Text Objective-C Wrapper.rar

    本压缩包"IOS应用源码之【类库与框架】-Core Text Objective-C Wrapper.rar"提供了与Core Text相关的Objective-C封装,使得开发者能够更方便地在iOS应用中利用Core Text的功能。Core Text是Apple的文本处理框架,...

    swift-JS-OC交互相互传递参数里面差不多都换成中文了

    在Swift、JavaScript以及Objective-C之间进行交互是一种常见的需求,特别是在混合式移动应用开发中。这个主题,"swift-JS-OC交互相互传递参数里面差不多都换成中文了",旨在探讨如何在这些不同的编程语言间有效地...

    GNUStep入门教程(中文)

    NeXTStep基于Unix(BSD),使用PostScript提供高质量图形界面,并通过Objective-C语言支持面向对象编程。 - **转型与发展**: 1994年,NeXT与Sun Microsystems合作推出了OpenStep接口,目标是创建一个跨平台的面向...

    基于MVVM的IOS开发框架EasyIOS.zip

    ReactiveCocoa简称RAC,就是基于响应式编程思想的Objective-C实践,它是Github的一个开源项目,你可以在这里找到它。 采用MKNetworkKit 网络框架,修改了部分功能,底层支持网络缓存,轻松控制是否启用缓存。 ...

    Doxygen中文手册

    Doxygen是可用于C++、 C、 Java、 Objective-C、 Python、 IDL (Corba 和 Microsoft flavors)以及部分PHP、 C#和 D语言的文档系统。 它能通过以下三种方式帮助你:  1,它能从一系列源文件中生成在线浏览文档...

    ios中文开发教程资料全收录

    学习Objective-C的基础知识,如消息传递机制、类别(Class)、协议(Protocol)和Category,对于阅读和理解这些代码库至关重要。 iOS应用通常由多个视图(View)和控制器(Controller)组成,这些构成了所谓的MVC(Model-...

    Doxygen代码注释规范

    Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。Doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF...

    notepad++ v5.30 汉化版

    C , CSS, Pascal, Perl, Python, Lua, TCL, Assembler, Ruby, Lisp, Scheme, Properties, Diff, Smalltalk, Postscript 及 VHDL. 打印所见即所得(WYSIWYG) ,如果你有彩色打印机,你可以把你的原始码以多种颜色...

    NSURLConnection使用demo

    NSURLConnection是iOS开发中用于处理HTTP网络请求的重要组件,它基于Objective-C,是Apple的Foundation框架的一部分。在iOS应用开发中,我们常常需要通过网络获取数据,如JSON、XML或者图片,NSURLConnection提供了...

    iPhone开发基础教程_(美)Dave_Mark_中文高清版

    - **编程基础**:熟悉至少一种编程语言,推荐Objective-C或Swift。 - **操作系统**:Mac OS X环境下的操作能力。 - **工具使用**:掌握Xcode的使用方法。 2. **基础知识**: - **iOS框架**:了解UIKit、...

    AFNetworking开速使用及源码注释

    它的设计遵循了Objective-C的Blocks和Category特性,使得代码更加简洁易读。 快速使用AFNetworking通常分为以下几个步骤: 1. **引入库**:在项目中导入AFNetworking库,可以通过CocoaPods或者手动添加依赖。 2. ...

    Flutter实战1

    - 当前主流的移动开发平台有iOS(使用Swift或Objective-C)、Android(使用Java或Kotlin)以及跨平台解决方案(如Flutter、React Native等)。 2. **跨平台框架的优势**: - 跨平台框架允许开发者使用单一代码库...

    强悍文本编辑器 - Notepad++ v5.3 Final 多国语言版

    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 ...

    notepad的理想替代Notepad++

    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...

    Notepad 5.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...

    iOS_Emoji:适用于iOS的表情符号

    由于server一开始并不支持emoji,现在你post含有emoji的数据到server,server会出现异常,主要是server的mysql开始的时候没有定义4位的字段,varchar都是3位的(普通的字符串或者表情都是占位3个字节,所以utf8足够用...

Global site tag (gtag.js) - Google Analytics