zxing/zxing · error · WriterException

Data too big for requested version

Error message

Data too big for requested version

What it means

Error "Data too big for requested version" thrown in zxing/zxing.

Source

Thrown at core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java:149

      if (hasGS1FormatHint) {
        // GS1 formatted codes are prefixed with a FNC1 in first position mode header
        appendModeInfo(Mode.FNC1_FIRST_POSITION, headerBits);
      }

      // (With ECI in place,) Write the mode marker
      appendModeInfo(mode, headerBits);

      // Collect data within the main segment, separately, to count its size if needed. Don't add it to
      // main payload yet.
      BitArray dataBits = new BitArray();
      appendBytes(content, mode, dataBits, encoding);

      if (hints != null && hints.containsKey(EncodeHintType.QR_VERSION)) {
        int versionNumber = Integer.parseInt(hints.get(EncodeHintType.QR_VERSION).toString());
        version = Version.getVersionForNumber(versionNumber);
        int bitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, version);
        if (!willFit(bitsNeeded, version, ecLevel)) {
          throw new WriterException("Data too big for requested version");
        }
      } else {
        version = recommendVersion(ecLevel, mode, headerBits, dataBits);
      }

      headerAndDataBits = new BitArray();
      headerAndDataBits.appendBitArray(headerBits);
      // Find "length" of main segment and write it
      int numLetters = mode == Mode.BYTE ? dataBits.getSizeInBytes() : content.length();
      appendLengthInfo(numLetters, version, mode, headerAndDataBits);
      // Put data together into the overall payload
      headerAndDataBits.appendBitArray(dataBits);
    }

    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();

    // Terminate the bits properly.

View on GitHub (pinned to 19aa2d8254)

Solutions

  1. Request a larger QR version, reduce the data, or lower the error correction level.
  2. Let the encoder choose the version automatically instead of pinning a small version.

When it happens

Trigger: Thrown at core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java:149 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zxing/zxing@19aa2d8254 (2026-08-14). Data as JSON: /api/errors/9c057706ea5d747b. Report an issue: GitHub.