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

时间:2022-06-01 08:41:21

在日常的网络请求中难免 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

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

 

 

 

  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:@"\n"];  
  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; @endm文件: @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];