Кодирование и декодирование byte[] с помощью ZXing

Я разрабатываю приложение для Android, и мне нужно закодировать и декодировать массив байтов в QRCode, сгенерированном с помощью приложения ZXing. Моя проблема в том, что мое декодированное сообщение не совсем соответствует сгенерированному массиву байтов. Я попытался создать QRCode на основе массива байтов, содержащего увеличивающиеся индексы, т.е.

input = [0, 1, 2, ..., 124, 125, 126, 127, -128, -127,... -3, -2, -1, 0, 1, 2, ...]

И после кодирования сообщения в QRCode и декодирования его на стороне ответчика я получаю следующий вывод массива байтов:

output = [0, 1, 2, ..., 124, 125, 126, 127, 63, 63,... 63, 63, 63, 0, 1, 2, ...]

Все "отрицательные "Значения байтов превращаются в символы ASCII 63: '?' символы вопросительного знака. Я предполагаю, что что-то не так с кодировкой кодировки, но поскольку я использую ISO-8859-1, который все утверждают, что это решение такой проблемы ( другая тема, посвященная тому же типу проблемы или здесь), я не вижу, где моя ошибка, или я пропускаю шаг во время создания экземпляра кодирования или декодирования. Вот код, который я выполняю для кодирования заданного массива байтов:

String text = "";
byte[] res = new byte[272];
for (int i = 0; i < res.length; i++) {
    res[i] = (byte) (i%256);
}
try {
    text = new String(res, "ISO8859_1");
} catch (UnsupportedEncodingException e) {
    // TODO
}
Intent intent = new Intent(Intents.Encode.ACTION);
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);
intent.putExtra(Intents.Encode.FORMAT, "ISO8859_1");
intent.putExtra(Intents.Encode.DATA, text);
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());

boolean useVCard = intent.getBooleanExtra(USE_VCARD_KEY, false);
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(activity, intent, dimension, useVCard);
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();

И для декодирования QRCode я отправляю следующее намерение

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.qrcodeDecoding);

    Intent intent = new Intent(Intents.Scan.ACTION);
    intent.putExtra(Intents.Scan.MODE, Intents.Scan.QR_CODE_MODE);
    startActivityForResult(intent, 0);
}

И жду результата:

@Override
protected void onActivityResult(int request, int result, Intent data)
{
    if(request == 0)
    {
        //action
        if(result == RESULT_OK)
        {
            String res = data.getStringExtra(Intents.Scan.RESULT);
            byte[] dat = null;

            try{
                    dat = res.getBytes("ISO8859_1");
            } catch(UnsopportedEncodingException e) {
                    //TODO
            }
        }
        else if(result == RESULT_CANCELED)
        {
            //TODO
        }
    }

}

Не могли бы вы сказать мне, где мои ошибки, или куда мне смотреть?

Большое спасибо,

Franck

9
задан Community 23 May 2017 в 10:29
поделиться