我正在尝试使用zxing decoder的c ++端口解码此qr代码。原始图片:image
经过一些预处理后,我准备了清晰的图像:
现在解码完这段代码后,我收到了错误的文字:
rbNJ‰F http://www.biccamera.com/
以字节为单位:
83 72 83 62 83 4e 83 4a 83 81 83 89 81 46 0d 0a 68 74 74 70 3a 2f 2f 77 77 77 2e 62 69 63 63 61 6d 65 72 61 2e 63 6f 6d 2f 00
通过网站the online barcode reader阅读上面的代码后,我收到了文字:
ビックカメラ: http://www.biccamera.com/
以字节为单位:
e3 83 93 e3 83 83 e3 82 af e3 82 ab e3 83 a1 e3 83 a9 ef bc 9a 0a 68 74 74 70 3a 2f 2f 77 77 77 2e 62 69 63 63 61 6d 65 72 61 2e 63 6f 6d 2f 0a
消息的第一部分是不同的(我检查过,zxing库在第一部分使用了汉字解码)。
如何正确解码此qrcode为utf8并将结果存储在std::wstring
?
我目前的代码:
#include <locale>
#include <codecvt>
#include <string>
zxing::qrcode::Decoder decoder;
zxing::Ref<zxing::DecoderResult> result = decoder.decode(zxing::Ref<zxing::BitMatrix>(bitmatrix));
zxing::Ref<zxing::String> ZXstring = result->getText();
std::string STDstring = ZXstring->getText();
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(STDstring); //bad conversion exception
答案 0 :(得分:0)
这个问题的解决方案非常简单:
要阅读上面的代码,您需要使用额外的库编译zxing:libiconv
。
之后,这个qr代码将被正确解码。
如果您使用Windows和Visual Studio,那么有关构建libiconv的文章可能会有所帮助:How to Build libiconv with Microsoft Visual Studio
在源代码中,请检查ifdef:NO_ICONV
或者甚至更好地使用CMake启用此库。