首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩与utf8编码

压缩与utf8编码
EN

Stack Overflow用户
提问于 2014-05-28 09:35:09
回答 2查看 5K关注 0票数 7

有人能告诉我为什么我在这个过程中失去信息吗?一些utf8字符似乎没有解码:"Biography":"\u003clink type=...Steve Blunt \u0026 Marty Kelley,但另一些则是:"Name":"朱敬

代码语言:javascript
复制
// Creating a 64bit string containing gzip data
string bar;
using (MemoryStream ms = new MemoryStream())
{
    using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress))
    using (StreamWriter writer = new StreamWriter(gzip, System.Text.Encoding.UTF8))
    {
        writer.Write(s);
    }
    ms.Flush();
    bar = Convert.ToBase64String(ms.ToArray());
}

// Reading it
string foo;
byte[] itemData = Convert.FromBase64String(bar);
using (MemoryStream src = new MemoryStream(itemData))
using (GZipStream gzs = new GZipStream(src, CompressionMode.Decompress))
using (MemoryStream dest = new MemoryStream(itemData.Length*2))
{
    gzs.CopyTo(dest);
    foo = Encoding.UTF8.GetString(dest.ToArray());
}

Console.WriteLine(foo);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 09:58:54

这可能是因为您使用StreamWriter编写字符串,但使用CopyTo()Encoding.GetString()读取字符串。

如果你尝试这个会发生什么?

代码语言:javascript
复制
// Reading it
string foo;
byte[] itemData = Convert.FromBase64String(bar);
using (MemoryStream src = new MemoryStream(itemData))
using (GZipStream gzs = new GZipStream(src, CompressionMode.Decompress))
using (StreamReader reader = new StreamReader(gzs, Encoding.UTF8))
{
    foo = reader.ReadLine();
}

虽然我认为你应该使用BinaryReaderBinaryWriter

代码语言:javascript
复制
string s = "Biography:\u003clink type...";
string bar;
using (MemoryStream ms = new MemoryStream())
{
    using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress))
    using (var writer = new BinaryWriter(gzip, Encoding.UTF8))
    {
        writer.Write(s);
    }
    ms.Flush();
    bar = Convert.ToBase64String(ms.ToArray());
}

// Reading it
string foo;
byte[] itemData = Convert.FromBase64String(bar);
using (MemoryStream src = new MemoryStream(itemData))
using (GZipStream gzs = new GZipStream(src, CompressionMode.Decompress))
using (var reader = new BinaryReader(gzs, Encoding.UTF8))
{
    foo = reader.ReadString();
}

Console.WriteLine(foo);
票数 4
EN

Stack Overflow用户

发布于 2014-05-28 12:53:31

问题很简单,字符已经在源字符串中编码了。

Ps :这个答案归功于https://stackoverflow.com/users/5409/rik :)

编辑:我也有StreamReader的问题,https://stackoverflow.com/users/106159/matthew-watson的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23907899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档