【问题标题】:Decompress Gzip String C# Windows Phone 8解压缩 Gzip 字符串 C# Windows Phone 8
【发布时间】:2013-12-15 15:45:45
【问题描述】:

我正在开发我的第一个 windows phone 8 应用程序。我正在尝试从服务器获取压缩的 json,但是,我在解压缩它时遇到了问题。

阅读了几个小时后,我尝试了两种方法:

-> 使用 Microsoft.Bcl.Compression 自动解压缩:

var handler = new HttpClientHandler();
if (handler.SupportsAutomaticDecompression)
{
    handler.AutomaticDecompression = DecompressionMethods.GZip;
}
var httpClient = new HttpClient(handler);
var str = await httpClient2.GetStringAsync(url);

但结果仍然是压缩的。

->获取信息压缩,将其转换为字节[]并尝试解压缩de字节[]。

var result = await client.GetStringAsync(url);
// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(result);
var bigStream = new GZipStream(new MemoryStream(byteArray), CompressionMode.Decompress);
var bigStreamOut = new System.IO.MemoryStream();
bigStream.CopyTo(bigStreamOut);
string s = bigStreamOut.ToString();

-bigStream 属性: -缓冲区大小 16384 -CanRead true -CanSeek 错误 -CanWrite true -评论空 -CRC32 0 -文件名空 -FlushMode 无 -LastModified 空 -位置 0 -Lenght、TotalIn 和 TotalOut 抛出异常。

顺便说一句,json 是使用 GZip 压缩的,它在 iOS 版本中运行良好。

谢谢

【问题讨论】:

  • 我想知道 - 客户端不应该已经返回解压缩流(如果它正确使用内容编码标头)?你在使用 HttpClient PCL 和这个包:nuget.org/packages/HttpClient.Compression 吗?
  • 你好,我尝试使用自动解压如下: var handler = new CompressedHttpClientHandler(); handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; var httpClient = new HttpClient(handler); var str = 等待 httpClient.GetStringAsync(url);但是会抛出异常:HttpClientHandler.AutomaticDecompression is not supported on this platform.

标签: c# json windows-phone-8 gzip compression


【解决方案1】:

尝试使用微软官方NuGet包Microsoft Compression。
Here are even some guides,如何配合HttpClient使用。

【讨论】:

  • 我之前试过,但结果还是被压缩了。我已经更新了问题,包括此选项的代码... thx
  • 问题出在服务器端...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2011-04-07
  • 2015-02-06
  • 2017-10-10
  • 2021-11-09
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多