解压缩的xml文本内容损坏

时间:2017-09-01 20:51:57

标签: java zip jetty unzip

我有一个问题解压缩xml签名并且它已被更改。

客户发送此XML:

    <DatoAdicional>
        <Codigo>03</Codigo>
        <Valor>: REGULARIZACI�N DEL VALOR FACTURADO*: DEBE SER:   30.29*: VALOR FACTURADO:  30.00*</Valor>
    </DatoAdicional>

但是当我们得到解密时(它被改变了):

<DatoAdicional>
    <Codigo>03</Codigo>
    <Valor>: REGULARIZACI???N DEL VALOR FACTURADO*: DEBE SER:   30.29*: VALOR FACTURADO:  30.00*</Valor>
</DatoAdicional>

问题是当它在服务器jetty中解压缩时,因为当使用客户端java解压缩该zip时,它是成功解压缩的。我的代码java是:

public static List<ZipContent> getXml(DataHandler file) throws IOException {
    ZipInputStream zis = null;
    List<ZipContent> zipContents = new ArrayList<>();
    try {
        zis = new ZipInputStream(file.getInputStream());
        for (ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry()) {
            if (!ze.isDirectory()) {
                byte[] buffer = new byte[1 << 11];
                ByteArrayOutputStream byteArrayOs = new ByteArrayOutputStream();
                int len;
                while ((len = zis.read(buffer)) > 0) {
                    byteArrayOs.write(buffer, 0, len);
                }
                ZipContent zc = new ZipContent();
                zc.setFileName(ze.getName());
                zc.setXml(new String(byteArrayOs.toByteArray()));
                zipContents.add(zc);
            }
            zis.closeEntry();
        }
        zis.close();
        return zipContents;
    } catch (IOException e) {
        throw e;
    }
}
请告诉我。

1 个答案:

答案 0 :(得分:1)

>>> element 'Vishakhapatnam - Ankapalli [Km 2.837 to &Km; 395.870 to Km358.00(New Chainage From Km 700.544 to Km 740.255)] ' 使用系统的默认编码从字节数组中创建一个String。在Windows系统上,这很可能是例如cp1252(在德国系统上,你的可能会有所不同)。我不知道类ZipContent,但您可以设置字节而不是将其转换为文本或使用正确的字符集,例如使用new String(byteArrayOs.toByteArray())