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

    xiaoxiao2021-03-25  154

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

    转载请注明原文地址: https://ju.6miu.com/read-2422.html

    最新回复(0)