zxing中文字符乱码解决 ╰+哭是因爲堅強的太久メ 2022-03-19 05:24 422阅读 0赞 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][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包导入,注释掉这个][http_maven.outofmemory.cn_com.beust_jcommander_1.35_maven_jar] //content = new String(content.getBytes("UTF-8"),"iso-8859-1"); 编译运行,然后解析,结果正常: 解析结果:慕课 二维码格式类型:QR_CODE 二维码文本内容:慕课 [https_blog.csdn.net_xiaoyanghijk_article_details_23258897]: https://blog.csdn.net/xiaoyanghijk/article/details/23258897 [http_maven.outofmemory.cn_com.beust_jcommander_1.35_maven_jar]: http://maven.outofmemory.cn/com.beust/jcommander/1.35/%E8%BF%99%E4%B8%AA%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E4%BB%8E%E4%B8%AD%E9%97%B4%E4%BB%93%E5%BA%93%E4%B8%8B%E8%BD%BD%EF%BC%8C%E4%B8%8D%E7%94%A8maven%EF%BC%8C%E7%84%B6%E5%90%8E%E5%B0%86%E6%96%B0%E7%9A%84jar%E5%8C%85%E5%AF%BC%E5%85%A5%EF%BC%8C%E6%B3%A8%E9%87%8A%E6%8E%89%E8%BF%99%E4%B8%AA
还没有评论,来说两句吧...