2015-01-20 5 views
0

XML 내에서 압축 된 문자열을 성공적으로 디코딩하려고합니다. 기본적으로 디코딩 된 문자열을 되돌리고 싶습니다. 때문에 유니티와 모노 나는 System.IO.Compression을 사용할 수 없습니다 (I가 일하고 있어요 ENV)의C# Decode base64 Ion.Zlib을 사용하는 Zlib 문자열

<data encoding="base64" compression="zlib"> 
    eJztmNkKwjAQRaN9cAPrAq5Yq3Xf6vVIbQJjEZR+nDwQZScrwztoORECLySBcIgZ7nc2y4KfyWDLx+Jb9nViNgDEwY+KioAXUgQN4+zpoCMwPmQAtoAx2CLFbA2oDEo9+hwG8DnIDtF/2K8ks086Tw2zH0uyMv7HcRr/6/EvvhnsPrsrxwX7rwU/0ODig/eV3mh3N1ld8eraWPaX6+64s9McesfrqcHfg1MpoifxcVEWjukyw+9AtFPl/I71pER3Of6j4bv7HI54s+MChhqLlPdZ/P3qMmFuo5h5NnTOhjM5tReN2yT51n5/v7J3F0vi46fk+ne7aX0i9l6If7mpufTX3f5wsqv9TAD2fJLT9VrTn7UeZnM5tR+v0LMQOHXwFnxe2/warGFRWf8QDjOLfP 
    </data> 

:

는 XML 내 압축 데이터 노드입니다. 그래서 Ionic.Zlib을 구현하고 있습니다. 내가 빈 문자열을 얻을 수 있기 때문에 출력으로 몇 가지 실수를하고 있어요 확인을 위해

public static string DecodeBase64Gzip(string input) 
{  
    byte[ ] ZlibBuffer = Convert.FromBase64String(input); 
    MemoryStream comp = new MemoryStream(ZlibBuffer); 
    Stream zlib = new Ionic.Zlib.ZlibStream (comp, Ionic.Zlib.CompressionMode.Decompress); 
    return new System.IO.StreamReader (zlib, System.Text.Encoding.UTF8).ReadToEnd(); 
} 

:

는 구문입니다.
public static string DecodeBase64Zlib(string input) 
    { 
     byte[ ] ZlibBuffer = Convert.FromBase64String(input); 
     return ZlibStream.UncompressString (ZlibBuffer); 
} 

그러나 같은 결과

(빈 문자열 ...)

당신에게 몇 가지 조언 유무 :

나는 그런 식으로도 tryied? 미리 감사드립니다!

답변

1

"압축 된 데이터가있는 XML 노드입니다." 어떻게 데이터를 압축 했습니까? 어떻게 든 엉망이됩니다. base64 디코딩 후 (올바르게 종료되지 않음) 데이터는 유효한 zlib 헤더로 시작하지만 유효하지 않은 수축 데이터가 뒤 따른다.

+0

안녕하세요. tmx (xml!) 파일은 다음과 같은 규칙에 따라 다른 소프트웨어에서 압축됩니다. https://github.com/bjorn/tiled/wiki/TMX-Map-Format#data 압축이 zlib와 인코딩은 base64입니다. 헤더 나 다른 예외는 없습니다. – Boxbuilder

+0

나는 어떻게 그런지 모르지만 당신이 제공 한 데이터는 묘사 된 것이 아니다. zlib 스트림이 손상되어 base64 문자열이 완료되지 않았습니다. 데이터를 올바르게 추출했는지, 그리고 잘라내어 질문에 붙여 넣기에 오류가 없는지 확인해야합니다. –