• iOS 字符串常用编码互相转换


    在日常的网络请求中难免 URL 中会有汉字的内容,若不做相应的处理直接将字符串转换成 URL 来加载是有问题的,至于文字编码的基本知识请参考这里 Unicode与UTF-8互转(C语言实现),现整理下几种常用的转换方法的代码如下,另推荐一个在线转换的网页{这里传送门}

     
    1. /// 汉字 UTF8 互转  
    2.     NSString* strA = [@"%E4%B8%AD%E5%9B%BD" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
    3.     NSString *strB = [@"中国" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
    4.     NSLog(@"%@",strA); // 中国  
    5.     NSLog(@"%@",strB); // %E4%B8%AD%E5%9B%BD

    1. - (NSString *)replaceUnicode:(NSString *)unicodeStr {  
    2.       
    3.     NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\u"withString:@"\U"];  
    4.     NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"""withString:@"\""];  
    5.     NSString *tempStr3 = [[@"""stringByAppendingString:tempStr2]stringByAppendingString:@"""];  
    6.     NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];  
    7.     NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData  
    8.                                                           mutabilityOption:NSPropertyListImmutable  
    9.                                                                     format:NULL  
    10.                                                           errorDescription:NULL];  
    11.       
    12.     return [returnStr stringByReplacingOccurrencesOfString:@"\r\n"withString:@" "];  
    13.       
     
    1. /// Unicode 转汉字  
    2.     NSString *content = @"\u4e2d\u56fd";  
    3.     content = [self replaceUnicode:content];  
    4.     NSLog(@"%@",content); // 中国
    应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎,
    就会满屏乱码。下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法
     

     NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

        char* c_test = "北京";

        int nLen = strlen(c_test);

        NSString* str = [[NSString alloc]initWithBytes:c_test length:nLen encoding:enc ];

        NSLog(@"str = %@",str);

     

    从 GBK 转到 UTF-8
    用 NSStringEncoding enc =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000) ,
    然后就可以用initWithData:encoding来实现。
     
    从 UTF-8 转到 GBK
    CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000),
    得到的enc却是kCFStringEncodingInvalidId。
    没关系,试试 NSData *data=[nsstring dataUsingEncoding:-2147482063];
     
    转换字符编码主要用到CFStringConvertEncodingToNSStringEncoding函数,具体的大家可以看看这个函数的用法
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000);
     
     
    完整代码如下:
    NSURL *url = [NSURL URLWithString:urlStr];
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString *retStr = [[NSString alloc] initWithData:data encoding:enc];
     
    一个比较方便的转换NSString为UTF8编码的函数,大家可以试试
     
    头文件:
    @interface NSString (OAURLEncodingAdditions) 
    - (NSString *)URLEncodedString; 
    - (NSString *)URLDecodedString; 
    @end
    m文件:
     
    @implementation 
    NSString (OAURLEncodingAdditions) 
     - (NSString *)URLEncodedString
     NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)self,NULL,CFSTR("!*'();:@&=+$,/?%#[]"),kCFStringEncodingUTF8);
     [result autorelease];
     return result; 
    }
     
    - (NSString*)URLDecodedString
    {
       NSString *result = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,(CFStringRef)self, CFSTR(""),kCFStringEncodingUTF8);CFSTR(""),kCFStringEncodingUTF8); 
       [result autorelease];    
       return result; 
    @end
    如果需要转换一个NSString, 只需要
     
    NSString *temp = [@"测试utf8" URLEncodedString];  
    NSString *decoded = [temp URLDecodedString];
  • 相关阅读:
    有关.net 框架的学习笔记
    简单定义工程架构
    respondsToSelector的相关使用
    IOS框架和服务
    iOS常用第三方类库
    ios换肤思想,及工具类
    集成激光推送
    远程推送
    ios本地推送
    UIPopoverController 的使用
  • 原文地址:https://www.cnblogs.com/wzitong/p/6732659.html
Copyright © 2020-2023  润新知