gpt4 book ai didi

java - GZIPInputStream 和字符集

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:29 24 4
gpt4 key购买 nike

我有一个包含拉丁文、西里尔文和中文字符的文本。我尝试使用 GZIPOutputStream 压缩字符串(通过 bytes[])并使用 GZIPInputStream 解压缩它。但我无法将所有角色转换回原始角色。有些显示为 ?

我认为 UTF-16 可以完成这项工作。

有什么帮助吗?

问候

这是我的代码:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.Inflater;
import java.util.zip.ZipException;

public class CompressUncompressStrings {

public static void main(String[] args) throws UnsupportedEncodingException {

String sTestString="äöüäöü 长安";
System.out.println(sTestString);
byte bcompressed[]=compress(sTestString.getBytes("UTF-16"));
//byte bcompressed[]=compress(sTestString.getBytes());
String sDecompressed=decompress(bcompressed);
System.out.println(sDecompressed);
}
public static byte[] compress(byte[] content){
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try{
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
gzipOutputStream.write(content);
gzipOutputStream.close();
} catch(IOException e){
throw new RuntimeException(e);
}
return byteArrayOutputStream.toByteArray();
}
public static String decompress(byte[] contentBytes){

String sReturn="";
ByteArrayOutputStream out = new ByteArrayOutputStream();
try{
GZIPInputStream gzipInputStream =new GZIPInputStream(new ByteArrayInputStream(contentBytes));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int value = 0; value != -1;) {
value = gzipInputStream.read();
if (value != -1) {
baos.write(value);
}
}
gzipInputStream.close();
baos.close();
sReturn=new String(baos.toByteArray(), "UTF-16");
return sReturn;
// Ende Neu

} catch(IOException e){
throw new RuntimeException(e);
}
}
}

最佳答案

我怀疑只是控制台有问题。我尝试了上面的代码,虽然它没有正确打印出任何字符,但当我测试字符串的往返时,它没问题:

System.out.println(sDecompressed.equals(sTestString)); // Prints true

这在您的机器上有什么作用?

关于java - GZIPInputStream 和字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7066077/

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