gpt4 book ai didi

java - GZIP字符串压缩无法解压 '£'个字符

转载 作者:行者123 更新时间:2023-12-01 17:32:55 30 4
gpt4 key购买 nike

我有以下用于压缩字符串的代码(为了清楚起见,删除了错误和资源处理):

import java.util.zip.GZIP*;
import java.io.*;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.io.IOUtils;
import com.Ostermiller.util.Base64;

//Code to compress the string
ByteArrayOutputStream output = new ByteArrayOutputStream(65536);
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new GZIPOutputStream(output)));
writer.write(stringContents);
String compressedString = new String(Base64.encode(output.toByteArray()));

...

//Code to decompress the string
byte[] compressedData = Base64.decode(compressedString.getBytes());
BufferedInputStream reader = new BufferedInputStream(
new GZIPInputStream(new ByteArrayInputStream(compressedData)));
String uncompressedString = IOUtils.toString(reader, "UTF-8");

我们在尝试对包含“£”的字符串进行编码和解码时遇到错误。具体来说,字符串压缩正常,但是当尝试解压缩字符串时,我们得到以下堆栈跟踪:

sun.io.MalformedInputException
at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java(Compiled Code))
at sun.nio.cs.StreamDecoder$ConverterSD.convertInto(StreamDecoder.java:287)
at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:337)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:223)
at java.io.InputStreamReader.read(InputStreamReader.java:208)
at java.io.Reader.read(Reader.java:113)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1128)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1104)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1078)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:382)

谁能告诉我我的方法错误以及如何解决这种情况?有更好的方法来做到这一点吗?非常感谢。

最佳答案

压缩数据时应指定字符编码:

BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8"));

如果不这样做,文本将根据系统默认字符编码转换为字节,在您的情况下,该编码不是 UTF-8。

关于java - GZIP字符串压缩无法解压 '£'个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289652/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com