Ich developping eine Android app, und ich brauche ein Byte-Array in einem QRCode mit der ZXing app erzeugt zu kodieren und dekodieren. Mein Problem ist, dass meine decodierte Nachricht nicht genau mit dem generierten Byte-Array übereinstimmt. ich versuchte, eine QRCode basierend auf einem Byte-Array, das Inkrementieren Indizes zu erzeugen, dhCodierung und Decodierung byte [] mit ZXing
input = [0, 1, 2, ..., 124, 125, 126, 127, -128, -127,... -3, -2, -1, 0, 1, 2, ...]
und nach der Nachricht im QRCode Codierungs- und es auf den Responder-Seiten Dekodieren I den folgenden Byte-Array-Ausgang erhalten:
output = [0, 1, 2, ..., 124, 125, 126, 127, 63, 63,... 63, 63, 63, 0, 1, 2, ...]
All "negative" Byte-Werte werden in ASCII-Zeichen 63 gedreht: '?' Fragezeichen. Ich gehe davon aus, dass etwas nicht stimmt mit der Codierung charset wird, aber da ich ISO-8859-1 bin mit der jeder die Lösung dieser Art von Problem zu sein behauptet (other topic treating the same kind of issue oder here), ich sehe nicht, wo mein Fehler ist oder wenn ich einen Schritt während der Einführung der Kodierung oder der Dekodierung überspringe. Hier ist der Code, den ich ausführen ein gegebenes Byte-Array zu kodieren:
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();
Und ein QRCode zu dekodieren, schicke ich die folgende Intent
@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);
}
und warten auf Ergebnis:
@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
}
}
}
Können Sie mir bitte sagen, wo meine Fehler liegen, oder wo soll ich hinschauen?
Danke viel,
Franck
Nur um "herumspielen" (ich habe keine Ahnung davon) was passiert, wenn Sie UTF-8 als Codierung zum Beispiel verwenden? – Ixx
UTF-8 wird sicherlich nicht funktionieren. Nicht jede Byte-Sequenz ist eine gültige UTF-8-Sequenz, um zu starten. Es ist also nicht einmal möglich, die meisten Eingaben auf diese Weise zu ersetzen. –