cpp-ZXing如何生成宽字符的二维码?

问题描述 投票:0回答:1
#include "ReadBarcode.h"
#include <iostream>
#include <array>
#include <string>

#include "BitMatrix.h"
#include "BitMatrixIO.h"
#include "CharacterSet.h"
#include "MultiFormatWriter.h"


#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <stb_image_write.h>

#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>

using namespace ZXing;

int main(int argc, char * argv[]){

    int sizeHint = 100;
    auto format = BarcodeFormatFromString("QRCode");
    auto writer = MultiFormatWriter(format).setMargin(10);

    //writer.setEncoding(CharacterSet::UTF8);

    BitMatrix matrix = writer.encode("ddd", sizeHint, sizeHint);
    auto bitmap = ToMatrix<uint8_t>(matrix);
    int success = stbi_write_png("C:\\Users\\chenz\\Desktop\\2.png", bitmap.width(), bitmap.height(), 1, bitmap.data(), 0);

    if (!success) {
            std::cerr << "Failed to write image: " << std::endl;
            return -1;
    }
    std::cout << "qrcode done " << std::endl;
    return 0;
}

这里是我的代码,用于在桌面上生成二维码图像。 效果很好。但是,如果我将编码内容更改为包含宽字符的内容,它就会损坏。我注意到编码方法同时接收

std::string
std::wstring
,我以
L
作为标题传递宽字符,但徒劳无功。

c++ qr-code zxing
1个回答
0
投票

如果您没有设置字符集,您会在 QREncoder.cpp 中遇到这段代码

    bool charsetWasUnknown = charset == CharacterSet::Unknown;
    if (charsetWasUnknown) {
        charset = DEFAULT_BYTE_MODE_ENCODING;
    }

哪里

static const CharacterSet DEFAULT_BYTE_MODE_ENCODING = CharacterSet::ISO8859_1;

这只能代表完整 Unicode 代码点集的一小部分,因此您应该指定 UTF-8 编码。

© www.soinside.com 2019 - 2024. All rights reserved.