0
我有以下我们用它来压缩字符串(含误差和资源为清楚起见处理移除)代码:GZIP串压缩不解压“£”字符
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)
谁能告诉我,我的方式错误,我怎么可能会解决这种情况呢?有没有更好的方法来做到这一点?提前谢谢了。
棒极了!完美的作品。感谢您指出我的(现在相当明显的)错误。 – 2012-02-15 08:07:07