iOS_经验(3)_转码(UTF-8 /GBK/Unicode/

作者: 丶纳凉 | 来源:发表于2016-06-07 23:19 被阅读2984次

    一丶 UTF-8 /GBK

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

    GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification

    /**
     * GBK->UTF8
     */
    //方法一 旧方法
    NSString *encode1 = [@"%E6%88%91" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"--encode1->%@<------", encode1);
    
    //方法二   新方法
    NSLog(@"--encode2->%@<------", [@"%E6%88%91" stringByRemovingPercentEncoding]);
    
    /**
     *  UTF-8 ->GBK
     */
    //方法一 旧方法
    NSString *decode1 = [@"我" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"--decode1-->%@<-----", decode1);
    
    //方法二 新方法
    NSLog(@"--decode1-->%@<-----",  [@"我" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]);
    

    二丶Unicode/UTF-8

    Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

    出现类似这样格式的字段"\U6df1\U5733\U56fd\U5f00\U884c01\U673a\U623",通常为Unicode码,转换测试函数为

    /**
     *  Unicode码UTF-8
     *
     *  @param unicodeStr Unicode
     *
     *  @return UTF-8
     */
    - (NSString *)replaceUnicode:(NSString *)unicodeStr
    {
        NSString *tempStr1 = [unicodeStr 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];
        //新方法
    NSString *returnStr = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable  format:NULL  error:NULL];
        
                                                               
        return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"\n"];
    }
    

    三丶 GBK/UTF-8

    出现类似这样格式的字段"深圳银行",通常为GBK码,转换方式为

    
        NSURL *url = [NSURL URLWithString:@"深圳银&#x884C"];
        
        NSData *responseData = [NSData dataWithContentsOfURL:url];
        
        NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:enc];
    
    

    四丶 UTF-8/GBK2312

    在ftp转码解码中遇到的问题;

    //解码:从服务器请求数据,转成显示中文
    - (NSString *)ChangeToChinessEncode:(NSString *)fileTitleStr
    {    if (fileTitleStr != NULL)    {        char *ReadStoreValue = (char *)[fileTitleStr cStringUsingEncoding:[NSString defaultCStringEncoding]];        if ( ReadStoreValue != NULL )        {
                fileTitleStr = [NSString stringWithCString:ReadStoreValue encoding: -2147482062];
            }    }    return fileTitleStr;
    }
    
    
    //编码:
    - (NSString *)encodeString:(NSString *)string;
    {
        NSString *urlEncoded = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(
            NULL,
            (__bridge CFStringRef) string,
            NULL,
            (CFStringRef) @"!*'\"();:@&=+$,?%#[]% ",
            kCFStringEncodingGB_18030_2000);
        return urlEncoded;
    }
    

    相关文章

      网友评论

        本文标题:iOS_经验(3)_转码(UTF-8 /GBK/Unicode/

        本文链接:https://www.haomeiwen.com/subject/eoxjdttx.html