2016-06-23 8 views
2

Ich versuche, binäre Daten in einem QR-Code zu speichern. Anscheinend unterstützen QR-Codes das Speichern roher Binärdaten (oder ISO-8859-1/Latin1). Hier ist, was ich (hex) kodieren möchten:Speichern von Binärdaten in QR-Codes

d1 50 01 00 00 00 f6 5f 05 2d 8f 0b 40 e2 01 

Ich habe versucht folgende Geber:

  1. qr.js

qrjs

  1. Google Charts

charts

  1. qrcode.js

qrcode.js

Dekodierung mit zxing.org produziert verschiedene falsche Ergebnisse. Die beiden Javascript diejenigen produzieren diese (es ist falsch, das erste Textzeichen sollte Ñ sein

qr.js and qrcode.js

Während Google Charts diese produziert ...

charts what

Was geht hier sind.? Wenn ich diese Sequenz kodiere (zumindest mit den JS-Einsen), dann funktioniert das gut - ich hätte gedacht, das Problem wären Nicht-ASCII-Zeichen, aber "(0xd1) ist Nicht-ASCII.

d1 50 01 00 00 00 01 02 03 04 05 06 40 e2 01 

Weiß jemand, was vor sich geht?

aktualisieren

Es fiel mir ein, scannen sie mit einem ZBar-basierten Scanner App zu versuchen, fand ich. Es scannt beide JS-Versionen in Ordnung (zumindest beginnen sie mit "P"). Bei den Google Charts stimmt man einfach nicht. Es scheint also, dass das Problem bei ZXing liegt (was überraschend scheisse ist - ich würde es niemandem empfehlen).

aktualisieren 2

ZBar kann nicht null Bytes verarbeiten. :-(

+0

Alle Arten von Kodierungen sind möglich, nur eine Frage der Interpretation. Ich nehme an, du würdest 'binary mode' (' 0100') verwenden, damit deine Eingabe klar funktioniert, aber die Ausgabe würde es erfordern, dass du es selbst codierst. Wie Binary2Hex .. – DanFromGermany

+0

Well qrcode.js behauptet mindestens * nur * 8-Bit-Modus zu unterstützen. Ich bin mir ziemlich sicher, dass es nur Bugs in den Decodern sind (ZXing ist total geschraubt, und ZBar verwendet nullterminierte Strings; yeay C). – Timmmm

Antwort

1

Es stellte sich heraus, dass ZXing nur Mist ist, und ZBar macht einige seltsame Sachen mit den Daten (konvertiert es zum Beispiel in UTF-8). Ich schaffte es, um die Rohdaten einschließlich null Bytes obwohl. Here is a patch für die beste Android ZBar-Bibliothek zu erhalten Ich habe festgestellt, dass das jetzt zusammengeführt wurde.

0

Nur auf einen Blick sind die qr Formate unterschiedlich. Ich qr Formate vergleichen würde, um zu sehen, ob es auch ein Problem der Fehlerkorrektur oder Codierung oder etwas ist.

enter image description here

+3

Dies sollte ein Kommentar sein, weil es die Frage nicht beantwortet. – DanFromGermany

+0

Danke @DanFromGermany. –

+0

Ich bin ziemlich sicher 1. und 3. sind beide 8-Bit-Modus. Die Enc-Bits scheinen fehlerkorrigiert zu sein, so dass Sie sie nicht direkt lesen können. – Timmmm

0

Ich habe System.Convert.ToBase64String verwendet, um das mitgelieferte Beispiel-Byte-Array in eine Base64-codierte Zeichenfolge zu konvertieren, dann habe ich ZXing verwendet, um ein QRCode-Bild zu erstellen.

Als Nächstes rief ich ZXing an, um die Zeichenfolge vom generierten QRCode zurück zu lesen, und rief dann System.Convert.FromBase64String an, um die Zeichenfolge zurück in ein Byte-Array zu konvertieren.

Ich bestätige, dass die Daten den Umlauf erfolgreich abgeschlossen haben.