用ZXing.NET对中文字符串编码

时间:2021-09-29 07:41:34

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


用ZXing.NET对中文字符串编码

 用ZXing.NET对中文字符串编码(2015-07-07 12:33:53)用ZXing.NET对中文字符串编码转载
标签: 

matlab

 

中文编码

 

qrcode

分类: 计算机与 Internet
    之前在《Matlab调用ZXing的详细步骤——二维码生成》中,给出了在Matlab中调用ZXing.NET生成QR码的具体步骤。尽管步骤非常具体,但是遗留了一个我认为不是很重要的问题,就是中文的编码。之所以认为不重要是因为我用QR码主要是生成URL。
    但是不管怎么样中文编码的问题如果能够解决就再好不过了。我今天在网上搜了一下,很多解决方法都需要修改ZXing的源码。可是我写《Matlab调用ZXing的详细步骤——二维码生成》就是为了帮助不会编译代码的小伙伴使用ZXing,因为ZXing.NET提供了编译好的dll。如果要改源码的话,还是绕不过编译。
    后来我在*上找到了Java的解决办法,见http://*.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的参数如下所示:
用ZXing.NET对中文字符串编码

相比四参数的encode,五参数的encode可以通过额外的参数来指定编码。这个额外的参数可以使用System.Collections.Generic.Dictionary类型,这是一个泛型类,在Matlab中可以用NET.createGeneric来构造实例。实例可以通过Add方法添加key-value对。上面的代码中我们添加的是
ZXing.EncodeHintType.CHARACTER_SET, 'utf-8'
将构造好的Dictionary实例作为第五个参数传给encode,就能解决中文编码的问题。生成的二维码如下图所示:
用ZXing.NET对中文字符串编码

用Barcode Scanner扫描的结果如下图所示:
用ZXing.NET对中文字符串编码

中文不再是乱码了。