これはおそらく非常に局所的な質問であり、コミュニティの他のメンバーには役に立たないでしょうが、誰かが私を助けてくれることを願っています.
私が知っていること
XML 要素内に、base64 でエンコードされた ZIP が文字列で含まれています。
ファイルは次のようになります。
<Document>
<Content vesion="1"><!-- BASE64 STRING ---></Content>
</Document>
私がしたいこと
文字列をデコードし、解凍します。
私がこれまでに試したこと(そして失敗したこと)
base64 文字列をデコードし、zip 拡張子のファイルに入れます
public string DecodeFrom64(string encodedData) { byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); string returnValue = System.Text.Encoding.Unicode.GetString(encodedDataAsBytes); return returnValue; }
関数で文字列を解凍しようとしました:
public static string DecompressString(string compressedText) { byte[] gZipBuffer = Convert.FromBase64String(compressedText); using (var memoryStream = new MemoryStream()) { int dataLength = BitConverter.ToInt32(gZipBuffer, 0); memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4); var buffer = new byte[dataLength]; memoryStream.Position = 0; using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) { gZipStream.Read(buffer, 0, buffer.Length); } return Encoding.UTF8.GetString(buffer); } }
エラーが発生しました:
GZip ヘッダーのマジック ナンバーが正しくありません。GZip ストリームを渡していることを確認してください...
関数で文字列を解凍しようとしました:
public static string UnZipStr(string compressedText) { byte[] input = Convert.FromBase64String(compressedText); using (MemoryStream inputStream = new MemoryStream(input)) { using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress)) { using (StreamReader reader = new StreamReader(gzip, System.Text.Encoding.UTF8)) { return reader.ReadToEnd(); } } } }
エラーが発生しました:
ブロックの長さが補数と一致しません...
この XML データを顧客に送信している担当者にメールを送信しましたが、問題は応答が非常に遅い (3 ~ 4 週間) ことです。
だから、誰かが私を正しい方向に向けてくれることを願っています。
質問にファイルを追加することはできないので、誰かが見たい場合は、メールか何かを送信できますか?