[ 技術探討 ] Barcode 之 ZXing 元件初探

Barcode之ZXing元件初探

因Barcode以及QRCode為眾多使用者最直接使用的工具,此次所要分享的,便是NuGet套件中的ZXing.Net使用心得,此為Open Source、可從Github中找到;在此先說明,個人使用該ZXing元件時,NuGet套件為0.16.4版本,且配合.Net Framework 4.5。

ZXing不僅在網路上被廣泛使用,在Barcode上也算是功能比較完整的套件,不管是透過Encode方法進行產生Barcode、還是透過Decode方法進行解析Barcode值等兩種功能均有提供;不過現在支援的Barcode類型還是有限,但以常用的Barcode類型如QRCode、Code39等來說也已經足夠。

ZXing支援產出的Barcode類型有UPC-A、EAN-8、EAN-13、Code39、Code128、ITF、Codabar、Plessey、MSI、QRCode、Data Matrix、Aztec、PDF-417,而此文將只針對QRCode進行探討。

對於該元件有兩種寫法均可產出Barcode圖檔,如下圖:

產出Barcode圖檔程式碼

範例程式中產出的QRCode圖檔均如下所示,用條碼機掃描亦可確認QRCode的值為https://www.ite2nas.com/ 無誤。

產出的QRCode圖檔

使用QRCode APP測試QRCode

當然,繼網址之後,還是需要檢查一下是否其它Barcode值亦可正常顯示,所以這時候就換了一下內容,如:「訂單編號:123456789  訂購項目內容:NE201 1台、1T硬碟 2顆」,然而在產生下方QRCode圖檔後發現,該QRCode掃描出來卻會出現亂碼。

產出的QRCode圖檔

使用QRCode APP測試QRCode

中文亂碼問題基本上都是編碼問題,然而麻煩點是:ZXing工具如何指定編碼。

而碰到問題時大家都會上網找資料,不論是從官方文件、搜尋引擎、論壇或部落格文章等方法,只是在這過程中個人發現一個很有趣的問題:多數部落格文章都直接指名ZXing無法支援中文編碼,唯一看到解決中文編碼問題的文章,卻是把ZXing的程式碼全數下載、再進行修正ZXing原始碼中的預設編碼。對此個人不予評論,畢竟即使大家都是使用ZXing元件,但也有可能版本不同。

不過話說回來,ZXing的編碼設定方式也的確沒有那麼的明顯,一般編碼設定方式是可以很簡單的在初始化、或屬性上進行設定,且設定方式通常也是採用原生的Encoding。

相較之下,ZXing雖然說是可以設定,但一來是透過指定的enum值即EncodeHintType.CHARACTER_SET進行設定,且須用Add的方式加入IDictionary中告知ZXing須採用設定;二來編碼設定方式須因應不同的寫法,而有了程式寫法上的差異。兩者相加也導致ZXing的編碼設定並沒有那麼容易讓人發現;兩種寫法的編碼設定方式均如下圖範例:

 

產出Barcode圖檔程式碼

 

在追加了編碼設定後產生出來的QRCode圖檔如下,此時便不會掃描到亂碼、而是正常顯示測試的Barcode文字內容:「訂單編號:123456789  訂購項目內容:NE201 1台、1T硬碟 2顆」。

 

產出的QRCode圖檔

使用QRCode APP測試QRCode

 

另外,值得一提的是:第一種寫法中是透過BarcodeWriter進行設定的,而在第二種寫法中其實也有用到BarcodeWriter,但如果把第一種寫法使用的中文編碼設定方式套入到第二種寫法中,產出來的QRCode卻依然無法正常顯示中文。對此,個人猜測ZXing套件即使有一定的完善程度,但內部程式碼可能還需要整合,或許還需要等待ZXing的版本變更。

 

Reference:

https://github.com/zxing/zxing

https://github.com/micjahn/ZXing.Net/

 


發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料