首页 新闻 会员 周边

用Zxing 的core和javase包生成二维码,手机端无法识别,求指导

0
悬赏园豆:10 [已解决问题] 解决于 2013-05-09 18:48

用Zxing 的core和javase包生成二维码,用默认编码方式时可以识别但是当编码设置为其他时,比如UTF-8或者GB18030时在手机端识别不出来,但是自己写在eclipse 是写个解码确实别的出来。

现在我想要自己生成包含中文的手机能识别的二维码请问要怎么办

代码如下:

生成二维码

public class Encoding {

public void encode(String contents, int width, int height, String imgPath) {
Map<EncodeHintType,Object> hints = new HashMap<EncodeHintType,Object>();
// 指定编码格式
hints.put(EncodeHintType.CHARACTER_SET, "ISO-8859-1");

try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
BarcodeFormat.QR_CODE, width, height,hints);

MatrixToImageWriter //目测是javase这边的编码方式问题
.writeToFile(bitMatrix, "png", new File(imgPath));

} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param args
*/
public static void main(String[] args) {
String imgPath = "e:/test2.png";
String contents = "中!" + "\n zengme buchu lai" ;

int width = 300, height = 300;
Encoding handler = new Encoding();
handler.encode(contents, width, height, imgPath);

System.out.println("create already!.");
}


}

拙急鸟的主页 拙急鸟 | 初学一级 | 园豆:190
提问于:2013-05-08 12:59
< >
分享
最佳答案
0

最近也发现了这个问题,后来一次随意的尝试,发现了一点眉目,简单的处理办法如下:

// 指定编码格式
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 注意这里utf-8一定要小写

这样就可以解决手机不能识别的问题,而且也能支持中文。

至于原因,查看了源代码后,发现使用“UTF-8”,会在文本编码前添加一段ECI(扩充解释Extended Channel Interpretation)

编码,就是这段编码导致手机不能解析。如果使用小写"utf-8"会使这个ECI判断失效而不影响内容编码方式。

至于详细的ECI解释,可以看《QRCode 编码解码标准》,我也没看懂啥意思。

收获园豆:10
zhuyuehe | 菜鸟二级 |园豆:212 | 2013-05-09 17:09

恩,我去试试,谢谢指导!

拙急鸟 | 园豆:190 (初学一级) | 2013-05-09 18:36

试过了,成功了。。。。。。用gbk的时候也要用小写的

拙急鸟 | 园豆:190 (初学一级) | 2013-05-09 18:47

@拙急鸟: 至于编码集合可以看com.google.zxing.common.CharacterSetECI中所列举。实际上可以通过修改类:com.google.zxing.qrcode.encoder.Encoder中的DEFAULT_BYTE_MODE_ENCODING常量值为"UTF-8"就好了,以后就默认用"UTF-8",不用每次设置了

zhuyuehe | 园豆:212 (菜鸟二级) | 2013-05-10 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册