Я создал простое веб-приложение, которое получает некоторые коды из конечной точки и генерирует ключ, из которого должен быть сгенерирован QR-код.
Конечный ключ - это Uint8Array
это нужно сделать в QRCode, я использую библиотеку angularx-qrcode
, а затем преобразую Uint8Array
в строку, используя String.fromCharCode.apply(null, uintArray)
, однако этот подход оказывается неэффективным для моего случая.
Мне нужно сгенерировать QRCode из необработанных значений HEX из моего массива, однако при использовании String.fromCharCode
кажется, что он генерирует символы UTF-8, таким образом генерируя неожиданные символы.
До сих пор я пытался использовать библиотекучтобы преобразовать строку в 'ISO-8859-1' с именем iconv-lite
, но, похоже, это не сработало.
Я также попытался преобразовать строку, как эта decodeURIComponent(escape(encodedString));
, однако это выдает ошибку, говорящую как недействительныйURI, вероятно, потому, что в ключе конца есть недопустимые символы, которые не работают с этой функцией.
Ниже приведен пример массива байтов, длина которого всегда 20 байтов.156,0,0,0,0,0,148,131,114,7,121,81,85,9,0,0,84,69,48,171
После того, как я дал ему немного, я думаю, что проблема также может быть связана с самой библиотекой QR-кода, поэтому я искал библиотеку QR-кода, которая получает Uint8Array
вместостроку, но мне не удалось ее найти.
Один из моих коллег смог решить эту проблему в приложении для Android, закончив строку как ISO-8859-1
вместо UTF-8
.
Я полагаю, что решением было бы сгенерировать QRCode из массива байтов напрямую, чтобы мне не пришлось беспокоиться о кодировке символов, но если кто-то знает другой подход для решения этой проблемы, я бы с удовольствием попробовал.
Мне нужна строка RAW, сгенерированная из этих байтов, например, первый байт 156
, в шестнадцатеричном - 9c
, поэтому мне нужен символ, представляющий 9c, однако 9c
не является «обычным»Символ ASCII, поэтому String.fromCharCode
у меня не работает, длина конечной строки должна быть точно 20 байтов, как и у массива.