Foundation_编码相互转化,数据转化
来源:互联网 发布:安卓编程类游戏 编辑:程序博客网 时间:2024/06/04 19:39
1.字典,数组,字符串、data之间的转化
/字典或者数组转化为nsstring NSArray *arr = [NSArray arrayWithObject:@"1"]; NSString *str = [arr JSONString]; //数组或者字典转化为json串 NSArray *arr1 = [str objectFromJSONString]; //json串转化为字典或者数组 NSData *data = [arr1 JSONData]; //把json串转化为nsdata NSString *str1 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //把NSdata转为为NSString NSData *data1 = [str1 dataUsingEncoding:NSUTF8StringEncoding]; //把NSString转化为NSData //二进制流转变为字符串 NSString *str=[[NSMutableString alloc] initWithData:self.receiveDataencoding:NSUTF8StringEncoding]; //转变其中的内容 str=[str stringByReplacingOccurrencesOfString:@"," withString:@",\n"]; str=[str stringByReplacingOccurrencesOfString:@"{" withString:@"{\n"]; str=[str stringByReplacingOccurrencesOfString:@"}" withString:@"\n}"]; NSLog(@"%@",str); //把字符串再转变为二进制流 self.receiveData=[NSMutableData dataWithData:[str dataUsingEncoding:NSUTF8StringEncoding]]; //request转变为URL NSURL *url=[request URL]; //URL转变为nsstring NSString *str=[[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@",str); NSURL *url=[NSURL URLWithString:@"http://img3.xooimage.com/files/6/1/3/firefox-logo-200x200-19f78a.png"]; //网站转变为二进制流 NSMutableData *data=[NSMutableData dataWithContentsOfURL:url]; UIImage *image=[UIImage imageWithData:data]; //读取文件 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"xml"]; //文件转变为二进制流 NSData *data = [NSData dataWithContentsOfFile:filePath];//取出首字母NSString *name = [city objectForKey:@"name"]; NSString *firstStr=[name substringWithRange:NSMakeRange(0, 1)];//从一个字符串中直接取出数组 NSString *str = [NSString stringWithFormat:@"Norman,Stanley,Fletcher"]; NSArray *arr = [str componentsSeparatedByString:@","]; NSLog(@"arr = %@",arr);//转码 urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
2.客户端和服务器端编码转化
1、ios手机端通过后台获取含有中文时,出现乱码即:将获取到的GBK 编码的字符解析成正常的汉字方法://声明一个gbk编码类型 NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); //使用如下方法 将获取到的数据按照gbkEncoding的方式进行编码,结果将是正常的汉字NSString *zhuanHuanHouDeShuJu = [[NSString alloc] initWithData:huoQuDaoDeData encoding:gbkEncoding];例子:本次项目因为使用的是ASIFormDataRequest 工具类解析从后台获取的数据,所以,将ASIHTTPRequest.m文件中的如下方法:- (NSString *)responseString{ NSData *data = [self responseData]; if (!data) { return nil; } return [[[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:[self responseEncoding]] autorelease];}替换为- (NSString *)responseString{ NSData *data = [self responseData]; if (!data) { return nil; } //明确表示用 gbkEncoding 进行解码 NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); return [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:gbkEncoding];}届时,我们再用下面这个方法请求或发送中文,都不会有问题了:// 本类的公共方法 用于通过指定的URL获取数据。+(NSString *)getStingbyHTTPURL2:(NSString *)url{ NSString *encodedURL = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; ASIFormDataRequest *asiHttpRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:encodedURL]]; NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8); [asiHttpRequest setStringEncoding:enc]; [asiHttpRequest startSynchronous]; asiHttpRequest. delegate = self; NSString *strResult = [asiHttpRequest responseString]; //以上的修改就是为了这句 return strResult; }参考: http://blog.sina.com.cn/s/blog_9e8867eb01013gbe.html从 GBK 转到 UTF-8 (上面的例子可作为一个成功案例)用 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000) ,然后就可以用initWithData:encoding来实现。从 UTF -8 转到 GBKCFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000),得到的enc却是kCFStringEncodingInvalid *data=[nsstring dataUsingEncoding:-2147482063]; 注意:必须使用kCFStringEncodingGB_18030_2000这个字符集,那个kCFStringEncodingGB_2312_80试了也不行。Id。没关系,试试 NSData
成功案例: 将uif-8格式(xcode默认的)的字符串str_selectedLeiXing 转换为GBK格式的strGBK,如下所示:
以上代码的实现,不需要添加任何附加开发包。
iphone之NSString,char, NSData相互转化 1. NSString转化为UNICODE String:(NSString*)fname = @“Test”;char fnameStr[10];memcpy(fnameStr, [fname cStringUsingEncoding:NSUnicodeStringEncoding], 2*([fname length]));2. NSString转化为char(NSString*)fname = @“Test”;char fnameStr[10];fnameStr =[fname UTF8String]; 3. char -> NSData:方法一: char *postData = "TEST"; *data = [NSData dataWithBytes:postData length:strlen(postData)]; NSData 方法二: - (id)initWithUTF8String:(const char *)bytes转换为NSString: 然后用NSString的 - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding4. NSData ->char char* bu=[returnData bytes];//使用下面两个方法,获取可以将一个nsstring 从gbk和utf8之间互转5. NSData->NSStringNSString* aStr;aStr = [[NSString alloc] initWithData:aData encoding:NSASCIIStringEncoding];6. NSString->NSDataNSData* aData;aData = [aStr dataUsingEncoding: NSASCIIStringEncoding];参考:http://blog.sina.com.cn/s/blog_4adf31ea0100t4y7.html NSData returnData ;
http://www.devdiv.com/article-1397-1.html
问题延伸:
再开发有手机端的应用程序软件时,要保证3个方面的数据编码格式一致,他们分别是:
1、java 后台的编码格式。我们公司用的erlang开发,目前还没有实践过。
2、手机端的编码格式(ios 默认时utf-8)
3、服务器tomcat 端口的编码格式(tomcat 端口默认没有设置编码格式,所以,默认情况下它不支持utf-8 编码的汉字)
一般地,用ios开发手机端,都需要设置tomcat端口的编码格式为utf-8
0 0
- Foundation_编码相互转化,数据转化
- string 整形数据 相互转化
- json数据与字符串的相互转化
- 16进制编码与字符编码的相互转化
- 编码方式MultiByte(ASCII)与WideChar(UNICODE)的相互转化
- 字符串编码转换(GBK) NSString, char, NSData相互转化
- C# UTF-8与GB2312编码的相互转化
- Swift中String和UTF8编码的NSData相互转化
- 类型相互转化
- C++ 字符串 相互转化
- px dp相互转化
- Timestamp 相互转化 String
- 阻抗导纳相互转化
- List Array相互转化
- 进制间的相互转化
- dp px相互转化
- JSon的相互转化
- 整型数据和字符串数据相互转化代码
- c# 调用showDialog后需要Dispose
- 基于MVC3 Razor视图引擎的富文本运用
- fun:数字字符转换成大写人民币通用方法封装
- VMware虚拟机安装ubuntu的时候卡在vmwaretools
- github的使用步骤
- Foundation_编码相互转化,数据转化
- Spring学习笔记(16)--------------Spring AOP总结(1)
- Android 动画效果——Animation 动画
- Xcode快速Doxygen文档注释 — 简明图文教程(3分钟后爽歪歪)
- iOS 使用系统默认声音、震动
- eClipase中如何查看JSP编译后的Java文件
- fzu2190
- cin>>,cin.get(),cin.getline()的一些用法
- C#中 winform只允许运行单个实例,并且会用Application.Restart();