2016-06-23 88 views
2

我試圖將二進制數據存儲在二維碼中。顯然,QR碼確實支持存儲原始二進制數據(或ISO-8859-1/Latin1)。這是我想要的編碼(十六進制):以二維碼存儲二進制數據

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

我已經試過以下編碼:

  1. qr.js

qrjs

  • Google Charts
  • charts

  • ​​
  • qrcode.js

    解碼與zxing.org生產各種不正確的結果。該兩個JavaScript的人產生這樣(這是錯的;第一個文本字符應該是N

    qr.js and qrcode.js

    而谷歌圖表生成此...

    charts what

    發生了什麼事是?這些都是正確的嗎?真奇怪的是,如果我編碼這個序列(至少使用JS),那麼它就可以正常工作 - 我原以爲這個問題是非ASCII字符,但是Ñ(0xd1)是非ASCII。

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

    有誰知道發生了什麼事?

    更新

    它發生在我嘗試使用基於zbar和掃描儀應用程序,我發現掃描它們。它可以掃描兩個JS版本(至少它們以ÑP開頭)。谷歌圖表一個是錯誤的。所以這似乎是ZXing的問題(這是令人驚訝的狗屎 - 我不會推薦給任何人)。

    更新2

    zbar和不能處理空字節。 :-(

    +0

    各種編碼都是可能的,只是解釋的問題。我猜你會使用二進制模式('0100'),所以你的輸入應該很清楚,但輸出會要求你自己編寫代碼。像Binary2Hex .. – DanFromGermany

    +0

    那麼qrcode.js至少聲稱* only *支持8位模式。我很確定這只是解碼器中的錯誤(ZXing完全被搞砸了,而ZBar使用以null結尾的字符串; yeay C)。 – Timmmm

    回答

    1

    它原來ZXing只是個廢話,而ZBar對這些數據做了一些奇怪的事情(例如將其轉換爲UTF-8)。我設法讓它輸出包含空字節的原始數據。Here is a patch爲最好的Android ZBar庫我發現,現在已經合併了。

    0

    就一目瞭然,使用qr格式是不同的。我比較QR格式,看它是否是糾錯編碼或者還是其他什麼東西的問題。

    enter image description here

    +3

    這應該是一個評論,因爲它沒有回答這個問題。 – DanFromGermany

    +0

    謝謝@DanFromGermany。 –

    +0

    我很確定1.和3.都是8位模式。 Enc位似乎是錯誤正確的,所以你不能直接讀取它們。 – Timmmm

    0

    我用System.Convert.ToBase64String將提供的樣本字節數組轉換成Base64編碼的字符串,然後我使用ZXing創建一個QRCode圖像。

    接下來,我調用ZXing從生成的QRCode讀取字符串,然後調用System.Convert.FromBase64String將字符串轉換回字節數組。

    我確認數據已成功完成往返。