iOS 原生中文二维码扫描器

iOS native QRCode scanner in Chinese Encoding

这个二维码是中文Big5编码的,不是UTF-8,我用的是iOS原生的class,AVMetadataMachineReadableCodeObject,试了下结果,字符串不可读,如下:

**·s¡ :2:25:¥Í¬¡ªwªjºñ:2:10

我尝试通过 UTF-8 将字符串转换为 NSData,然后我再次从 NSData 转换为 NSString,通过其他编码,我认为原始字符串已经得到错误的编码,这就是为什么我可以转换为正确的原因字符串.

这是正确的内容:

**新式环保背:1:2:纯吃茶绿茶:2:20:乳香世家全:1:83:原生日式绿:2:25:生活泡泡绿:2:10

有什么方法可以使用 iOS 原生 class 获得正确的结果?谢谢

我找到了答案, QRCode 内容字符串编码使用的是 NSISOLatin1StringEncoding,而不是 NSUTF8StringEncoding。

代码:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{

    NSMutableString *message = [NSMutableString string];
    for (AVMetadataMachineReadableCodeObject *codeObject in metadataObjects) {

        NSInteger index = [metadataObjects indexOfObject:codeObject];

        NSString *readedString = codeObject.stringValue;

        // Restore raw data using NSISOLatin1StringEncoding.
        NSData *dataString = [readedString dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:NO];

        // Create big5 encoding.
        NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingBig5_HKSCS_1999);

        // Decode data using big5 encoding.
        readedString = [[NSString alloc] initWithData:dataString encoding:encoding];

        [message appendFormat:@"%zd. \"%@\"\n\n", index, readedString];
    }

    NSLog(@"%@", message);
}

原因是二维码编码不正确

我尝试扫描您显示的代码,得到相同的结果。 但是我使用你提供的内容,在这个网站(https://cli.im),重新创建一个新的二维码,然后我扫描它并得到正确的结果。