Zol*_*tók 5 unicode qr-code objective-c ios zbar
使用 ZBar 扫描 QR 码时,该过程产生的字符串无法正确显示 unicode 字符。任何免费使用的二维码生成器(如http://qrcode.kaywa.com)将单词Márti编码为二维码将导致M??rti。
在其他 SO 问题 ( 1 , 2 ) 中,建议在结果字符串的开头嵌入 BOM,但这样做:
NSString *qrString = [NSString stringWithFormat:@"\xEF\xBB\xBF%@",symbol.data];
Run Code Online (Sandbox Code Playgroud)
或这个:
NSString *qrString = [[NSString alloc] initWithFormat:@"\357\273\277%@", symbol.data];
Run Code Online (Sandbox Code Playgroud)
导致了与亚洲性格相同的、有缺陷的结果。symbol.data是由 ZBar 提供的结果 NSString。
更新:根据 dda 的回答,解决方案如下:
NSString *qrString = symbol.data;
//look for misinterpreted acute characters and convert them to UTF-8
if ([qrString canBeConvertedToEncoding:NSShiftJISStringEncoding]) {
qrString = [NSString stringWithCString:[symbol.data cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下库创建“\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e”(日语)和“M\xc3\xa1rti”的二维码:
\n\n\n\n您可以使用 ZBar 读取这些二维码。
\n\n\n\nNSString* orginalString = @"M\xc3\xa1rti"(or "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"(japanese)); \nNSString *data = [[NSString alloc] initWithFormat:@"\\357\\273\\277%@", orginalString]; \nUIImage* qrcodeImage = [QRCodeGenerator qrImageForString:data imageSize:imageView.bounds.size.width];\nRun Code Online (Sandbox Code Playgroud)\n\n\n\nNSString* orginalString = @"M\xc3\xa1rti"(or "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"(japanese));\nNSString *data = [[NSString alloc] initWithFormat:@"\\357\\273\\277%@", orginalString];\n\n//first encode the string into a matrix of bools, TRUE for black dot and FALSE for white. Let the encoder decide the error correction level and version\nDataMatrix* qrMatrix = [QREncoder encodeWithECLevel:QR_ECLEVEL_AUTO version:QR_VERSION_AUTO string:data];\n\n//then render the matrix\nUIImage* qrcodeImage = [QREncoder renderDataMatrix:qrMatrix imageDimension:qrcodeImageDimension];\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |