2016-12-05 11 views
0

Ich benutze Android Studio mit ksoap2 (Wrapper von http://www.wsdl2code.com) , um einen .net Web-Service zu konsumieren. Dieser Web-Service gibt eine Zeichenfolge zurück, die base64-codiert für eine gzip-Zeichenfolge ist, die eine serialisierte XML-Datei enthält.Decode base64 gzip .net webservice

Ich kann nicht die richtige XML-Zeichenfolge erhalten.

Der Android-Code sieht wie folgt aus:

 byte[] data = Base64.decode(xmlO, Base64.DEFAULT); 
     ByteArrayInputStream bais = new ByteArrayInputStream(data); 
... 
     GZIPInputStream gzip = new GZIPInputStream(bais); 
     InputStreamReader reader = new InputStreamReader(gzip,"US-ASCII"); 
     int n = 0; 
     char[] buffer = new char[1024 * 8]; 
     StringWriter writer = new StringWriter(); 
     while (-1 != (n = reader.read(buffer))) writer.write(buffer, 0, n); 
     decodedXML= writer.toString(); 
     writer.close(); 
.... 

ich verschiedene Konfigurationen von ByteArrayInputStream/Input ausprobiert habe.

Der Algorithmus .NET-Decodierung wie folgt aussieht:

 Dim ArIN() = Convert.FromBase64String(_inputString) 
      Using decomStream As IO.MemoryStream = New IO.MemoryStream(ArIN) 
       Using hgs As IO.Compression.GZipStream = New IO.Compression.GZipStream(decomStream, IO.Compression.CompressionMode.Decompress) 
        Dim sr As New IO.StreamReader(hgs, System.Text.Encoding.Unicode, True) 
        _inputString = "" 

        strDS = sr.ReadToEnd 
        sr.Close() 
        hgs.Close() 
       End Using 
      End Using 

Irgendwelche Vorschläge? Folgt der base64 string:

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 
+0

Ich habe verschiedene Möglichkeiten ausprobiert: InputStreamReader ... aber ich bekomme immer NULL Zeichen in der Zeichenfolge, also mache ich einfach eine decodedXML.replaceAll ("\ 0", ""); –

Antwort

0
InputStreamReader reader = new InputStreamReader(gzip,"US-ASCII"); 

Dim sr As New IO.StreamReader(hgs, System.Text.Encoding.Unicode, True) 

US-ASCII und Encoding.Unicode sind nicht die gleiche Codierung.

Encoding.Unicode ist die irreführende Methode von .NET, sich auf die Codierung UTF-16LE zu beziehen. Von JVM sollte new InputStreamReader(gzip, "UTF-16LE"); die Bytes auf die gleiche Weise behandeln wie der .NET-Code.