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),重新创建一个新的二维码,然后我扫描它并得到正确的结果。
这个二维码是中文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),重新创建一个新的二维码,然后我扫描它并得到正确的结果。