iOS中编码转化

系统 1837 0

iOS中编码转化

 

1.UTF-8转化

 

     NSString *data = @" 你好,北京! " ;

 

    // 转换成 UTF-8

 

    NSString *dataUTF8 = [data stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];

 

    NSLog ( @"%@" ,dataUTF8);

 

    //UTF-8 GBK,将UTF8代码替换,官方解释如下。

 

//Replaces all percent escapes with the matching characters as determined by the given encoding.  Returns nil if the transformation is not possible (i.e. the percent escapes give a byte sequence not legal in the given encoding).  See CFURLCreateStringByReplacingPercentEscapes in CFURL.h for more complex transformations

 

     NSString *dataGBK = [dataUTF8 stringByReplacingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];

 

    NSLog ( @"%@" ,dataGBK);

 

 

 

在Xcode4.2中执行结果如下:

 

 

将上述方法封装,如下:

 

//Unicode UTF-8

 

+ ( NSString *)encodeToPercentEscapeString: ( NSString *) input  

 

{  

 

    // Encode all the reserved characters, per RFC 3986  

 

    // (< http://www.ietf.org/rfc/rfc3986.txt >)  

 

    NSString *outputStr = ( NSString *)   

 

    CFURLCreateStringByAddingPercentEscapes ( kCFAllocatorDefault ,  

 

                                            ( CFStringRef )input,  

 

                                            NULL ,  

 

                                            ( CFStringRef ) @"!*'();:@&=+$,/?%#[]" ,  

 

                                            kCFStringEncodingUTF8 );  

 

    return outputStr;  

 

}  

 

 

 

+ ( NSString *)decodeFromPercentEscapeString: ( NSString *) input  

 

{  

 

    NSMutableString *outputStr = [ NSMutableString stringWithString :input];  

 

    [outputStr replaceOccurrencesOfString : @"+"  

 

                               withString : @" "  

 

                                  options : NSLiteralSearch  

 

                                    range : NSMakeRange ( 0 , [outputStr length ])];  

 

    

 

    return [outputStr stringByReplacingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];  

 

}

2.UTF-8和Unicode转化

//Unicode UTF-8

 

+ ( NSString *) replaceUnicode:( NSString *)aUnicodeString

 

{

 

    NSString *tempStr1 = [aUnicodeString stringByReplacingOccurrencesOfString : @"\\u" withString : @"\\U" ];  

 

    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString : @"\"" withString : @"\\\"" ];  

 

    NSString *tempStr3 = [[ @"\"" stringByAppendingString :tempStr2] stringByAppendingString : @"\"" ];  

 

    NSData *tempData = [tempStr3 dataUsingEncoding : NSUTF8StringEncoding ];  

 

    NSString * returnStr = [ NSPropertyListSerialization propertyListFromData :tempData  

 

                                                           mutabilityOption : NSPropertyListImmutable    

 

                                                                     format : NULL  

 

                                                           errorDescription : NULL ];  

 

    

 

    return [returnStr stringByReplacingOccurrencesOfString : @"\\r\\n" withString : @"\n" ]; 

 

}

 

 

 

 

 

+( NSString *) utf8ToUnicode:( NSString *)string

 

{

 

    NSUInteger length = [string length ];

 

    NSMutableString *s = [ NSMutableString stringWithCapacity : 0 ];

 

    for ( int i = 0 ;i < length; i++) 

 

    {

 

        unichar _char = [string characterAtIndex :i];

 

        // 判断是否为英文和数字

 

        if (_char <= '9' && _char >= '0'

 

        {

 

            [s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];

 

        }

 

        else if (_char >= 'a' && _char <= 'z' )

 

        {

 

            [s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];

 

            

 

        }

 

        else if (_char >= 'A' && _char <= 'Z' )

 

        {

 

            [s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];

 

            

 

        }

 

        else

 

        {

 

            [s appendFormat : @"\\u%x" ,[string characterAtIndex :i]];

 

        }

 

    }

 

    return s;

 

}

 

iOS中编码转化


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论