Aspose.BarCode for Java 24.6の特殊文字(×、÷、¶など)ができない

Aspose.BarCode for Java 24.6で生成したQRコードに
特定の文字(×、÷、¶など)が含まれている場合、
S-JISの文字列として読込みできませんでした。
(22.12では問題なくS-JISの文字列として読み取れています)

なお、読み取り結果のバイナリデータを確認すると、
「×」の場合は「D7」となっており、S-JISの「817E」ではありませんでした。

「×」などをS-JISの文字として読み取れるQRコードの生成方法を教えてください。

<QRコード生成条件>
QrVersion:6
QrErrorLevel:M
QREncodeMode:AUTO
※image.jpgの2つのQRコードは「×÷℃$%〓¶」

image.jpg (33.1 KB)

@mio.kazuhisa,

画像ファイルをありがとうございます。

問題を正確に評価するために、Aspose.BarCode for Java v22.12 を使用してバーコードを生成する方法の詳細を共有して、サンプル コード スニペットを提供してください。さらに、Aspose.BarCode for Java 24.6 を使用して QR コードを生成する方法のサンプル コードを提供してください。問題を評価し、適切なチケットをログに記録します。

v22.12とv24.6は以下の同じソースコードで実施しています。

  BarcodeGenerator generator = new BarcodeGenerator(
      com.aspose.barcode.generation.EncodeTypes.QR,
      code);
  BaseGenerationParameters baseParams = generator.getParameters();
  BarcodeParameters barcodeParams = baseParams.getBarcode();
  QrParameters qrParams = barcodeParams.getQR();

  qrParams.setQrErrorLevel(QRErrorLevel.LEVEL_M);
  qrParams.setQrEncodeMode(QREncodeMode.AUTO);
  qrParams.setQrEncodeType(QREncodeType.FORCE_QR);
  qrParams.setQrVersion(QRVersion.AUTO);

  barcodeParams.getCodeTextParameters().setLocation(CodeLocation.NONE);

  ByteArrayOutputStream os = new ByteArrayOutputStream();
  generator.save(os, BCIF);

  return new ByteArrayInputStream(os.toByteArray());```

@mio.kazuhisa,

コード スニペットと詳細をありがとうございます。

問題を詳しく調査する必要があります。 社内の問題追跡システムで次の新しいチケットを開き、サポート ポリシーに記載されている条件に従って修正を配信します。
問題 ID: BARCODEJAVA-1974

更新が届き次第、ここでお知らせします。

よろしくお願い致します。

急いでいますので、判明次第、「×」などをS-JISの文字として読み取れるQRコードの生成方法を教えてください。

@mio.kazuhisa,

お客様に通知する前に、お客様の問題を徹底的に評価するため、しばらくお時間をいただきますようお願いいたします。できるだけ早くご連絡させていただきます。

1 Like

@mio.kazuhisa,

チケットは来週に予定されています。この問題は ECI モードでエンコードを使用することで解決できる可能性がありますが、そのためには広範囲にわたるテストが必要になります。来週、最新情報をお知らせします。

Hi, mio.kazuhisa

We have improved the Unicode character encoding for 2D barcodes starting from version 24.5 of Aspose.BarCode to optimize the data stream and reduce the barcode size. The issue you’re encountering stems from the fact that the character “×” can be encoded as the byte “D7” in the default QR encoding standard ISO/IEC 8859-1. To minimize the barcode’s size, this character is now encoded as a single byte “D7” instead of two bytes as it was in earlier versions.

To customize the encoding of Unicode characters in your QR code, you can try one of the following four options:

  1. Using UTF-8 Encoding with ECI Mode. Set the following parameters:
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.QR, code);
generator.Parameters.Barcode.QR.QrEncodeMode = QREncodeMode.ECI;
generator.Parameters.Barcode.QR.QrECIEncoding = ECIEncodings.UTF8;
generator.Save("filename.png");

In this case, the codetext will first be converted to a byte stream using UTF-8 encoding and then compressed. The character “×” will be encoded similarly to version 22.12, but an ECI identifier will be added to the beginning of the data stream.

  1. Using Shift_JIS Encoding with ECI Mode. Set the following parameters:
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.QR, code);
generator.Parameters.Barcode.QR.QrEncodeMode = QREncodeMode.ECI;
generator.Parameters.Barcode.QR.QrECIEncoding = ECIEncodings.Shift_JIS;
generator.Save("filename.png");

Here, the codetext will be converted into a byte stream using the S-JIS encoding and then compressed. The character “×” will be encoded differently from version 22.12, but this approach might suit your requirements better. The ECI identifier will also be inserted before the data stream.

  1. Using SetCodeText with UTF-8 Encoding.
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.QR);
generator.SetCodeText(code, Encoding.UTF8);
generator.Save("filename.png");

In this case, the codetext will be encoded in UTF-8 and compressed similarly to version 22.12. A UTF-8 Byte Order Mark (EF BB BF) will be inserted before the data stream.

  1. Using SetCodeText and GetCodeText with S-JIS Encoding.
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.QR);
generator.SetCodeText(code, Encoding.GetEncoding(932));  // S-JIS encoding
Bitmap bitmap = generator.GenerateBarCodeImage();

The codetext will be converted to a byte stream using the S-JIS encoding and then compressed. However, to retrieve the correct data, you’ll need to use the GetCodeText method on the reader side:

using (BarCodeReader reader = new BarCodeReader(bitmap, DecodeType.QR))
{
    reader.ReadBarCodes();
    Console.WriteLine(reader.FoundBarCodes[0].GetCodeText(Encoding.GetEncoding(932)));
}

Please try these methods and let us know if you need further assistance.

ありがとうございます。確認してみます。

@mio.kazuhisa,

時間をかけて、ご要望に合った提案オプションを評価し、お試しください。問題や質問がある場合は、お気軽にお問い合わせください。

1 Like