iOS 扫描POS机二维码的问题和url编码的问题

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解码所导致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值