zxing中文字符乱码解决
程序员文章站
2024-01-27 00:02:10
...
package com.zpr.code;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;
/**
* @ClassName CreateQRCode
* @Description
* @Author zhoup
* @Date 2019/2/15 9:20
* @Version 1.0
**/
public class CreateQRCode {
public static void main(String[] args) {
// 定义二维码的规格
int width = 300;
int height = 300;
String format = "png";
String content = "慕课";
// 定义二维码的参数
HashMap hints = new HashMap();
// 定义字符编码
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
// 纠错级别
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
// 边距
hints.put(EncodeHintType.MARGIN,2);
// 生成二维码
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,width,height);
Path file = new File("D:/javacode/img/img.png").toPath();
MatrixToImageWriter.writeToPath(bitMatrix,format,file);
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成的二维码扫描结果为???
解决方法:
添加
content = new String(content.getBytes("UTF-8"),"iso-8859-1");
网上查询到另一种解释和方法:
1 进入qrcode 下的encode文件夹,修改Encode.cs下的语句
internal const System.String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";
改为 internal const System.String DEFAULT_BYTE_MODE_ENCODING = “UTF-8”; //选择编码模式
2 进入decode文件夹,修改guessEncoding函数,这个函数的目的是猜测编码类型,不用猜了,我直接把它改为return UTF-8,其余一律注释掉。自己编码的,当然知道编码模式。
原文:https://blog.csdn.net/xiaoyanghijk/article/details/23258897
这个好像的是.net的版本,我在java源码中的Encoder.java中找到
static final String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";
后文解码猜测我们用的是“ISO-8859-1”,所以以这种方式解码,但是没有对应的字符编码,所以输出“???”
如上面那篇文章的方式,我修改了
static final String DEFAULT_BYTE_MODE_ENCODING = "UTF-8";
然后用IDEA重新生成jar包,中间有个插曲,学习视频和其他博客都是用eclipse生成jar包,所以允许报错生成,但是IDEA不允许,所以需要解决报错的问题,其实就是下载com.beust.jcommander.JCommander的jar包下载
http://maven.outofmemory.cn/com.beust/jcommander/1.35/这个可以直接从中间仓库下载,不用maven,然后将新的jar包导入,注释掉这个
//content = new String(content.getBytes("UTF-8"),"iso-8859-1");
编译运行,然后解析,结果正常:
解析结果:慕课
二维码格式类型:QR_CODE
二维码文本内容:慕课
上一篇: Ajax请求数据总结
下一篇: IDEA控制台乱码解决