当与扫描zbar和QR码由该方法得到的字符串不正确显示Unicode字符。 通过任何游离编码为QR码的字MARTÍ使用QR代码生成器(如http://qrcode.kaywa.com )将导致以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。
UPDATE:基于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];
}
我可以创建“日本语”的QR码(日本)和“马蒂”有下列库:
- IOS的QR码编码器
- QR码编码器换的Objective-C 。
您可以阅读zbar和那些QR码。
IOS的QR码编码器 :
NSString* orginalString = @"Márti"(or "日本語"(japanese));
NSString *data = [[NSString alloc] initWithFormat:@"\357\273\277%@", orginalString];
UIImage* qrcodeImage = [QRCodeGenerator qrImageForString:data imageSize:imageView.bounds.size.width];
QR码编码器换Objective-C的 :
NSString* orginalString = @"Márti"(or "日本語"(japanese));
NSString *data = [[NSString alloc] initWithFormat:@"\357\273\277%@", orginalString];
//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
DataMatrix* qrMatrix = [QREncoder encodeWithECLevel:QR_ECLEVEL_AUTO version:QR_VERSION_AUTO string:data];
//then render the matrix
UIImage* qrcodeImage = [QREncoder renderDataMatrix:qrMatrix imageDimension:qrcodeImageDimension];
按照有关QR维基百科页面 ,二进制数据的编码[将马蒂将适用]是ISO 8859-1。 它可以是一个编码为Unicode的编码问题。 但看到一个汉字出现,可能是因为这个问题是编码为-QR编码问题:也许是文字,是不是ASCII,默认情况下为移位JIS X 0208编码(即汉字/假名)。
谨慎的只是一个字,因为是该解决方案将使用排除在日本和实际汉字编码内的QR码扫描。 事实上,它可能会创建与canBeConvertedToEncoding内Unicode字符的任何QR码问题:NSShiftJISStringEncoding。
更普遍的解决方案是现有插入BOM字符QR码编码以强制UTF-8编码(被创建之前)。 zbar和从来没有在这里,它根植在创建QR码的问题。