您的位置:首页 > 移动开发 > IOS开发

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解码所导致的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: