这个QRCode由中文Big5编码而不是UTF-8创建,我使用iOS本机类,AVMetadataMachineReadableCodeObject,尝试获取结果,但字符串不可读,如下所示:
**·s|¡Àô«OI:1:2:¯Â³ð¯ùºñ¯ù:2:20:一个»¥@®ã¥þ:1:83:ìμѤé|¡ºñ:2 :25:¥Í¬¡ªwªjºñ:2:10
我尝试通过UTF-8将字符串转换为NSData,然后我再次从NSData转换为NSString,由其他编码转换,并且我thnik原始字符串已经得到错误的编码,这就是为什么我可以转换为正确的字符串。
这是正确的内容:
**新式环保背:1:2:纯吃茶绿茶:2:20:乳香世家全:1:83:原萃日式绿:2:25:生活泡沫绿:2:10
有没有办法使用iOS本机类获得正确的结果?感谢
答案 0 :(得分:1)
我找到了答案, 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);
}
答案 1 :(得分:0)
原因是QR码的编码不正确。
我尝试扫描您显示的代码,得到相同的结果。 但我使用你提供的conent,在这个网站(https://cli.im)中,重新创建一个新的qrcode,然后我扫描它并得到正确的结果。