用ZXing.NET對中文字符串編碼

分類:編程 時間:2016-11-04
[摘要:轉自:http://blog.sina.com.cn/s/blog_4513dde60102vn2h.html 用ZXing.NET對中筆墨符串編碼 (2015-07-07 12:33:53) 轉載▼ 標簽: matlab 中文編碼 qrc]

轉自:http://blog.sina.com.cn/s/blog_4513dde60102vn2h.html


用ZXing.NET對中文字符串編碼

 \(2015-07-07 12:33:53) 轉載▼ 標簽: 

matlab

 

中文編碼

 

qrcode

分類: 計算機與 Internet     之前在《Matlab調用ZXing的詳細步驟——二維碼生成》中,給出了在Matlab中調用ZXing.NET生成QR碼的具體步驟。盡管步驟非常具體,但是遺留了一個我認為不是很重要的問題,就是中文的編碼。之所以認為不重要是因為我用QR碼主要是生成URL。
    但是不管怎麽樣中文編碼的問題如果能夠解決就再好不過了。我今天在網上搜了一下,很多解決方法都需要修改ZXing的源碼。可是我寫《Matlab調用ZXing的詳細步驟——二維碼生成》就是為了幫助不會編譯代碼的小夥伴使用ZXing,因為ZXing.NET提供了編譯好的dll。如果要改源碼的話,還是繞不過編譯。
    後來我在Stackoverflow上找到了Java的解決辦法,見http://stackoverflow.com/questions/8859268/how-to-encode-a-string-in-a-qr-code-using-zxing-on-android。原版的(Java)ZXing和ZXing.NET用起來還是差不多的,即使是Java的解決方法也可用於ZXing.NET。Matlab代碼如下:
zxingasm NET.addAssembly('C:\lab\zxing\zxing.dll');
writer ZXing.MultiFormatWriter();
hints NET.createGeneric('system.Collections.Generic.Dictionary'{'ZXing.EncodeHintType''System.Object'});
hints.Add(ZXing.EncodeHintType.CHARACTER_SET, 'utf-8')
mtx writer.encode('測試中文編碼'ZXing.BarcodeFormat.QR_CODE, 400400hints);
char(mtx.ToString());
m(m==13[];
m(m==10[];
m(1:2:end);
reshape(m, 400400);
m(m~='X'1;
m(m=='X'0;
double(m)';
imshow(m);

與之前的代碼相比,最主要的修改是使用了5參數的encode方法。這裏可以用
methodsview(writer)
的方式查看MultiFormatWriter有哪些方法,各個方法的參數是什麽。encode的參數如下所示:


相比四參數的encode,五參數的encode可以通過額外的參數來指定編碼。這個額外的參數可以使用System.Collections.Generic.Dictionary類型,這是一個泛型類,在Matlab中可以用NET.createGeneric來構造實例。實例可以通過Add方法添加key-value對。上面的代碼中我們添加的是
ZXing.EncodeHintType.CHARACTER_SET, 'utf-8'
將構造好的Dictionary實例作為第五個參數傳給encode,就能解決中文編碼的問題。生成的二維碼如下圖所示:


用Barcode Scanner掃描的結果如下圖所示:


中文不再是亂碼了。


Tags: Internet 具體步驟 計算機 matlab 二維碼

文章來源:


ads
ads

相關文章
ads

相關文章

ad