zoukankan      html  css  js  c++  java
  • 【iOS】编码格式

    【环境描述】

    OS X ML 10.8,Xcode4.4.1,iOS 5.1

    【问题描述】

    因服务器和客户端数据交互需要编码格式统一,常见的是UTF8和GB2312编码,该文档简单讲解Http通讯中的URL和Post的Body部分的数据编码格式,供后续翻阅。

    【问题分析】

    一、Http的URL编码

        url中需要对中文以及不支持的字符进行%处理,同时可能需要UTF8与GB2312之间互转,在iOS中实现如下(从搜索中直接拷贝过来的,仅供参考):

        //转换成GB2312----uif8
        -(CFStringRef)EncodeUTF8Str:(NSString *)encodeStr
        {
            CFStringRef nonAlphaNumValidChars = CFSTR("![ DISCUZ_CODE_1 ]’()*+,-./:;=?@_~");
            CFStringRef preprocessedString = CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)encodeStr, CFSTR(""), kCFStringEncodingUTF8);

            CFStringRef newStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,preprocessedString,NULL,nonAlphaNumValidChars,kCFStringEncodingUTF8);
            return newStr;
        }

        //uft8-----gb2312
        -(NSString *)EncodeGB2312Str:(NSString *)encodeStr

        {
            CFStringRef nonAlphaNumValidChars = CFSTR("![ DISCUZ_CODE_1 ]’()*+,-./:;=?@_~");
            NSString *preprocessedString = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)encodeStr, CFSTR(""), kCFStringEncodingGB_18030_2000);
            NSString *newStr = [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)preprocessedString,NULL,nonAlphaNumValidChars,kCFStringEncodingGB_18030_2000) autorelease];
            [preprocessedString release];
            return newStr;
        }

    二、Post的Body编码格式

        iOS默认是UTF8编码,而有的服务器未做编码自适应,要求必须传gb2312编码,实现如下:

        由上层拼接Body字符串,如:NSString *body = [NSString stringWithFormat:@"{\"functiont....

        然后在创建request请求时,转换成GB2312,如下:

        NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

        [m_pRequest setHTTPBody:[body dataUsingEncoding:encoding]];

  • 相关阅读:
    Microsoft Dynamics CRM 2011 配置好的IFD环境 怎么制作证书?
    Microsoft Dynamics CRM 2011 Plugin中PluginExecutionContext.InputParameters["Target"]中的Target是从哪来的?
    编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类
    Microsoft Dynamics CRM 2011 常用JS 按F12 改动窗体上数据的方法
    JS 实现轮播图
    JS晃动的花朵
    定时器的应用 盒子的移动
    JavaScript 经典实例
    累加 9*9乘法表 阶乘
    函数方法
  • 原文地址:https://www.cnblogs.com/ftrako/p/2771257.html
Copyright © 2011-2022 走看看