[摘要:轉自: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, 400, 400, hints);
m = char(mtx.ToString());
m(m==13) = [];
m(m==10) = [];
m = m(1:2:end);
m = reshape(m, 400, 400);
m(m~='X') = 1;
m(m=='X') = 0;
m = 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 二維碼
文章來源: