当前位置: 首页 > 知识库问答 >
问题:

在Java中从ZIP字符串生成数据矩阵

艾子石
2023-03-14

我试图从一个zip字符串生成一个数据矩阵,使用Java中的Zstar,结果是java.lang.IllegalArgumentException:消息包含ISO-8859-1编码之外的字符。

代码为:

byte[] bytesOfZIP= (byte[])statD.returnObj; // here is the zipped content
String texto = new String(bytesOfZIP, "UTF8");
DataMatrixWriter barcodeWriter = new DataMatrixWriter();
BitMatrix bitMatrix = barcodeWriter.encode(texto, BarcodeFormat.DATA_MATRIX, 400, 400);// exception appears at this line
BufferedImage bi = MatrixToImageWriter.toBufferedImage(bitMatrix);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] fbytes = baos.toByteArray();

我正在寻找任何解决方案来用这些特殊字符编码ZIP文件,而不一定用Zxing。

共有2个答案

许俊风
2023-03-14

您应该尝试将“UTF8”替换为“StandardCharsets.UTF_8”。因为我不认为“UTF8”是设置字符串字符集的正确方法

戚阳曜
2023-03-14

不是答案

因此,在回答形式上存在一些问题。

byte[] bytesOfZIP = (byte[])statD.returnObj; // here is the zipped content

Object(或char[]String)不能大小写为byte[]数组。

String texto = new String(bytesOfZIP, "UTF8");

这将编译,但官方名称是"UTF-8",如前所述,Standard ardCharset。UTF_8会更好(没有Unsupport tedEncodingException,因为UTF-8m是标准的,始终可用)。但是bytesOfZIP永远不是UTF-8文本,这需要特殊格式。事实上,二进制数据永远不应该在带有2字节字符的String中按下。它需要两次转换为Unicode,双重内存,并且几乎肯定会损坏。

DataMatrixWriter barcodeWriter = new DataMatrixWriter();
BitMatrix bitMatrix = barcodeWriter.encode(texto, BarcodeFormat.DATA_MATRIX, 400, 400);

BufferedImage bi = MatrixToImageWriter.toBufferedImage(bitMatrix);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] fbytes = baos.toByteArray();

JPEG(.jpg,.JPEG)是一种有损压缩。对于黑白条形码,请尝试使用png。

解决方案

解压缩应该首先检查格式:test.txt.gz将使用GZipInputStreamtest.zipZipFile、ZipInputStream或从zip文件系统复制。这些是可以在Internet中找到的标准类。

由于内容可能是纯文本,您可以在手动解压缩后首先尝试硬编码。

如果从字节[]开始,则矩阵打印机可能需要MS Latin 1或字符集。fromName(“Windows-1252”)。拉丁语-1、ISO-8859-1或标准字符集。ISO_8859_1的禁止控制范围为\u0080-\u00BF。

 类似资料:
  • 问题内容: 我有我需要生成使用。可以转换吗?你们可以帮忙吗? 问题答案: 这是NSArray和NSDictionary的类别,它使此操作变得非常容易。我为漂亮打印添加了一个选项(换行和标签使阅读更容易)。 。 。 。

  • 问题内容: 我需要将字符串转换为某种形式的哈希。这在JavaScript中可行吗? 我没有使用服务器端语言,所以我不能那样做。 问题答案: Object.defineProperty(String.prototype, ‘hashCode’, { value: function() { var hash = 0, i, chr; for (i = 0; i < this.length; i++)

  • 问题内容: 我想要一个5个字符串,该字符串由从集合中随机选择的字符组成。 用JavaScript做到这一点的最佳方法是什么? 问题答案: 我认为这将为您工作:

  • 问题内容: 如何在Swift中生成随机的字母数字字符串? 问题答案: Swift 4.2更新 Swift 4.2在处理随机值和元素方面引入了重大改进。您可以在此处阅读有关这些改进的更多信息。这是减少到几行的方法: Swift 3.0更新 原始答案:

  • 问题内容: 我正在寻找实现以下目标的方法: 我可以自己编写它,但是在我看来,我曾经看过一个执行此操作的库,可能是slf4j记录器,但是我不想编写日志消息。我只想生成字符串。 您知道这是哪个图书馆吗? 问题答案: 参见方法。

  • 本文向大家介绍用Java生成随机字符串,包括了用Java生成随机字符串的使用技巧和注意事项,需要的朋友参考一下 让我们首先声明一个字符串数组并初始化- 现在,创建一个Random对象- 生成随机字符串- 示例 输出结果 让我们再次运行它以获得不同的随机字符串-