无法使用 AVFoundation 读取带有 ASCII 字符的二维码

Cannot read QR Code with ASCII characters using AVFoundation

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
unsigned char myKey[2];
myKey[0]=1;
myKey[1]=2;
if(metadataObjects == nil  || [metadataObjects count] ==0)
{
    qrCodeFrameView.frame=CGRectZero;
}
if (metadataObjects != nil && [metadataObjects count] > 0) {
    AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
    if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
        Encoder *encoder=[[Encoder alloc] init];
        NSLog(@"0000-----%@",[metadataObj stringValue]);
        unsigned char buffer_to_decrypt=[metadataObj stringValue];
        [encoder tripledes_decrypt:buffer_to_decrypt lenght:sizeof(buffer_to_decrypt) key:myKey];
        NSData *data = [NSData dataWithBytes:buffer_to_decrypt length:sizeof(buffer_to_decrypt)];
        NSLog(@"data = %@", data);
        NSString *result=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"-----<<<<result>>>>%@",result);
        AVMetadataMachineReadableCodeObject *barCodeObj=(AVMetadataMachineReadableCodeObject *)[_videoPreviewLayer transformedMetadataObjectForMetadataObject:metadataObj];
        qrCodeFrameView.frame=barCodeObj.bounds;
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        [self stopReading];
        _isReading = NO;
    }
}}

在这里我可以读取普通的二维码。但是 [metadataObj stringValue] 在从 QR 码读取 ASCII 字符时返回 nil。我用它来加密二维码中的数据,这样只有我的应用程序才能读取我的二维码。如何读取 ASCII 字符? 这是我的加密二维码QR Code image

Apple 的 SDK 仅使用 UTF8 编码进行转换,这不足为奇。

在旧 iTunes 上下载该应用程序并进行探索后,我发现了对 ZXingObjcZBarSDK 的引用,我猜它们是用来读取 QRCode 的,这可以解释为什么该应用程序可以读取它和你的不能。

所以你可以使用这些第三方库,或者如果你想继续使用 Apple 的库,这里有一个可能的解决方案:

NSString <=> EncryptedString <=> Base64EncryptedString <=> QRCode

或者等待 Apple 提供,而不是仅提供 [metadataObj stringValue][metadataObj stringValueUsingEncoding:][metadataObj rawData](与 [[NSString alloc] initWithData:[metadataObj rawData] encoding:NSASCIIEncoding] 一起使用后即可)。