您的位置:首页 > 其它

UTF-8 和 GBK 的 NSString 相互转化的方法

2012-11-02 12:34 337 查看
应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎,

就会满屏乱码。下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法

 

从 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];

原文地址:http://www.ccbase.net/post/23.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: