【发布时间】: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