Я пытаюсь декодировать этот код qr, используя c ++ порт декодера zxing. Исходное изображение: образ
После некоторой предварительной обработки я подготовил четкое изображение:
Теперь после декодирования этого кода я получаю неправильный текст:
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
После прочтения кода выше через веб-сайт онлайн считыватель штрих-кода Я получаю текст:
ビ ッ ク カ メ ラ:
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
Решение этой проблемы действительно простое:
Чтобы прочитать приведенный выше код, вам нужно скомпилировать zxing с дополнительной библиотекой: libiconv
,
После этого этот код qr будет правильно декодирован.
Если вы используете Windows и Visual Studio, эта статья о сборке libiconv может быть полезна: Как создать libiconv с помощью Microsoft Visual Studio
В исходном коде проверьте ifdef: NO_ICONV
или даже лучше включить эту библиотеку с помощью CMake.