iOS 中的编码问题总结
2016-06-29 16:27
330 查看
iOS 中的编码问题总结
Url编码
在网络开发中, 如果请求的url包含中文 空格等一些特殊的字符, url必须进行转义后才能请求成功。NSString *urlString = [NSString stringWithFormat:@"http://www.xxxx.com/?param=%@",@"中文"];
如果直接用这个url去请求会报错,需要先转义,NSString提供方法
stringByAddingPercentEscapesUsingEncoding: 编码 stringByReplacingPercentEscapesUsingEncoding: 解码
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString];
解压和压缩中文文件名乱码
这种问题,记得是刚开始工作的时候处理过,不管什么压缩库文件,基本处理方法一致。//解压 //NSString * strPath = [NSString stringWithCString:filename]; NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSString * strPath = [NSString stringWithCString:filename encoding:enc]; //压缩 //新的文件名指定下面的编码格式 (constchar*) [newname cStringUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)]
二维码ZBar库文件扫描中文结果乱码
//解决中文乱码问题 if ([result canBeConvertedToEncoding:NSShiftJISStringEncoding]) { result = [NSString stringWithCString:[result cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding]; }
网上搜索到的,基本上都是上面的解决方案。 但是我在加上这段代码后,只能解决部分的乱码问题,测试的MM通过各种网站和工具用中文生成了6个二维码,加上这段代码后仍然只能识别其中一个。后来稍微查了下二维码,常用的QR码是日本人发明的,NSShiftJISStringEncoding这个是日本用的编码格式;我猜想二维码已经普及到多个国家了,各个网站用的编码未必是开始的NSShiftJISStringEncoding编码,于是我想到了常用的ISO-8859-1编码,对应iOS的编码是NSISOLatin1StringEncoding;
NSString *tempStr; //修正扫描出来二维码里有中文时为乱码问题 if ([text canBeConvertedToEncoding:NSShiftJISStringEncoding]) { tempStr = [NSString stringWithCString:[text cStringUsingEncoding:NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding]; //如果转化成utf-8失败,再尝试转化为gbk if (tempStr == nil) { tempStr = [NSString stringWithCString:[text cStringUsingEncoding:NSShiftJISStringEncoding] encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)]; } } else if([text canBeConvertedToEncoding:NSISOLatin1StringEncoding]) { tempStr = [NSString stringWithCString:[text cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]; //如果转化成utf-8失败,再尝试转化为gbk if (tempStr == nil) { tempStr = [NSString stringWithCString:[text cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)]; } } //如果转化都失败,就显示原始扫描出来的字符串 if (tempStr == nil) { tempStr = text; }
修改后,6个二维码全部扫描识别正常。
NSString 转 cString 中文乱码问题
NSString *nsstring = @"中文字符串"; const char *cString = [nsstring UTF8String]; NSLog(@"cString ——————————> %s ",cString);
结果cString打印出来是乱码 char类型的C字符串中文在Mac系统下打印出来显示乱码,这种乱码并不是错误,是ASCII解码所导致的。
相关文章推荐
- IOS-8-Xcode6 使用MJRefresh报错:Too many arguments to function call, expected 0, have 3
- iOS开发——收集Github上的iOS控件和开发资料
- 思科IOS新命名规范详细图解(IOS 12.3) 各版本区别
- iOS-NSString-Base64String-Base64原理
- iOS 图片裁剪与居中显示
- iOS可执行文件瘦身方法
- iOS中集成ijkplayer视频直播框架
- ios页面跳转
- iOS 获取系统日期时间
- iOS开发3D Touch基本开发与使用
- 成为iOS顶尖高手,你必须来这里(这里有最好的开源项目和文章)
- iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)
- [iOS]创建界面方法的讨论
- ios 气泡聊天
- IOS开发—修改状态栏颜色
- iOS文件目录结构
- iOS 时间戳 时间串 比较和转换
- [iOS 拍照上传] 上传图片 旋转 + 压缩大小
- iOS开发The Operation couldn't be completed.(LaunchServicesError error 0.)的解决方法
- iOS开发之AFNetworking 3.0.4使用