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

应用都要遇到一个很头疼的问题:文字编码,汉字的 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];

时间: 2025-01-02 01:14:02

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

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

应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); char* c_test = "北京"; int nLen = strlen(c_test); NSS

Sublime的中文GBK显示乱码的解决方法

import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.

array、list和set相互转化的方法

这里总结一下Array.List和Set相互转化的方法. Array转化为List 将Array转化为List是使用Arrays.asList()方法. String[] arr= new String[]{"yanggb1", "yanggb2", "yanggb3"}; List list = Arrays.asList(arr); list.add("yanggb4"); // not ok list.remove(&q

NSString的一些方法总结(闲来无事总结的一些关于string的方法,想到哪总结到哪)

闲来无事,给大家总结了一些关于字符串的方法,如果初学者忘记可以来这里查阅一下,方法中已经给大家标记清楚方法的用途及输出类型,绝对的干货,好,废话不多说,直接上代码: 1 //功能:字符串的创建 2 //输出结果:str 3 NSString *str = @"str"; 4 6 //功能:可以创建格式化字符串,拼接字符串 7 //输出结果:abcstrdef 8 NSString *str1 = [[NSString alloc]initWithFormat:@"abc%@d

iOS 关于NSString的一些方法

在项目中整理的一些关于字符串应用方法,可以全部封装在一个类里面进行调用,会不断更新添加: 1.数字转换成对应的中文数字(项目中课程分级目录的章节号用到) 摘自:http://blog.csdn.net/it_ds/article/details/47128563 +(NSString *)translation:(NSString *)arebic { NSString *str = arebic; NSArray *arabic_numerals = @[@"1",@"2&

IOS成长之路-Nsstring中搜索方法rangeOfString

NSString *str1 = @"can you \n speak English"; NSString *str = @"\n"; //在str1这个字符串中搜索\n,推断有没有 if ([str1 rangeOfString:str].location != NSNotFound) { NSLog(@"这个字符串中有\n"); } //rangeOfString 前面的參数是要被搜索的字符串,后面的是要搜索的字符 //NSNotFound

NSString的创建方法(一)

NSString是OC里的三大基本数据结构之一, 也是我们经常使用的数据结构, 关于NSString的使用有好几种方法, 这里只讲解前三种创建和简单使用的方法. 除了直接使用NSString *str = @"Hello, World!"这种普通直接的创建方法, 还有使用下面的三种方法. 第一种: initWithString: 通过复制一个已有的a字符串, 并且返回给第二个b字符串对象, 所以它们的内容和地址是完全一模一样的, 这个和copy的方法有些类似. 第二种: initWit

NSString类的方法实现

创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error; 创建一个新字符串并将其设置为 url 指定的内容,使用字符编码enc,在error上返回错误+ (id)stringWithContentsOfFile:(NSString *)path encodi

NSString的创建方法(二)

上一篇文章我们已经讲解过关于NSString的前三种创建方法, 现在我们来讲另外三种创建的方法, 这三种方法也叫做创建临时字符串. 这三种方法分别就是: stringWithUTF8String:将一个C类型的字符串转换成一个OC的字符串, 和前面提到的initWithUTF8String有些类似, 但是不同的是, 它不使用alloc来创建. stringWithFormat:将一个已经初始化的字符串和一些自定义参数返回给字符串对象, 和initWithFormat类似, 但它也不使用alloc