使用 ZBar 扫描 QR 码时,该过程产生的字符串无法正确显示 unicode 字符。任何免费使用的 QR 码生成器(如http://qrcode.kaywa.com )将Márti编码为 QR 码的单词将导致Mテ。rti。
在其他 SO 问题(1、2)中,建议在结果字符串的开头嵌入 BOM,但这样做:
NSString *qrString = [NSString stringWithFormat:@"\xEF\xBB\xBF%@",symbol.data];
或这个:
NSString *qrString = [[NSString alloc] initWithFormat:@"\357\273\277%@", symbol.data];
导致了与亚洲角色相同的、有缺陷的结果。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];
}