您的位置:首页 > 移动开发 > Objective-C

ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法

2016-05-12 00:00 477 查看
应用都要遇到一个很头疼的问题:文字编码,汉字的 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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: