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

转自: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 400hints) ;
char(mtx.ToString()) ;
m(m == 13 [] ;
m(m == 10 [] ;
m( 1: 2: end) ;
reshape(m,  400 400) ;
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对中文字符串编码

中文不再是乱码了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值