5

ZBar で QR コードをスキャンすると、プロセスの結果として生成される文字列が Unicode 文字を正しく表示しません。無料で使用できる QR コード ジェネレーター ( http://qrcode.kaywa.comなど)によって QR コードとしてエンコードされた単語Mártiは、 Mテ。rtiになります。

他の SO の質問 ( 12 ) では、結果の文字列の先頭に BOM を埋め込むことが提案されていましたが、これを行うと:

NSString *qrString = [NSString stringWithFormat:@"\xEF\xBB\xBF%@",symbol.data];

またはこれ:

NSString *qrString = [[NSString alloc] initWithFormat:@"\357\273\277%@", symbol.data];

アジアのキャラクターと同じ、欠陥のある結果になりました。symbol.dataZBar によって提供される結果の 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];
}
4

3 に答える 3

4

QR に関するウィキペディアのページによると、[Márti が適用する] バイナリ データのエンコードは ISO 8859-1 です。これは、Unicode としてのエンコードの問題である可能性があります。しかし、漢字を見ると、QR としてのエンコードの問題である可能性があります。テキストは ASCII ではないため、デフォルトでシフト JIS X 0208 (つまり、漢字/かな) としてエンコードされている可能性があります。

于 2012-11-15T11:51:53.113 に答える
2

以下のライブラリで「日本語」と「Márti」のQRコードを作成できました。

これらの QR コードを ZBar で読み取ることができます。

iOS-QR-Code-Encoder :

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-Code-Encoder-for-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];
于 2013-06-11T13:53:50.763 に答える