#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
作为标题传递宽字符,但徒劳无功。
如果您没有设置字符集,您会在 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 编码。