Gzip文本解压编码错误及JSON字符解码异常求助
嘿,我来帮你搞定这个编码和解压的问题!你遇到的乱码(�)和Encoding错误,核心是没走对正确的解码流程——咱们先理清楚问题,再给出直接能用的解决方案:
问题根源拆解
- 你提供的
myString是Base64编码后的Gzip压缩二进制数据,直接把它当成普通字符串解码肯定会出乱码(�),因为二进制字节根本不是合法的文本编码内容。 - Encoding error则是因为你可能跳过了Base64解码步骤,直接用文本编码去解析Gzip二进制流,导致编码完全不匹配。
正确的解码流程(C#示例)
下面是完整的代码,能帮你把这段数据还原成正常的文本:
using System; using System.IO; using System.IO.Compression; using System.Text; public class GzipDecoder { public static string DecodeGzipBase64(string base64GzipString) { // 第一步:将Base64字符串解码为二进制字节数组 byte[] gzipBytes = Convert.FromBase64String(base64GzipString); // 第二步:对字节数组进行Gzip解压 using (var memoryStream = new MemoryStream(gzipBytes)) using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) using (var reader = new StreamReader(gzipStream, Encoding.UTF8)) // 默认用UTF-8,若乱码可尝试其他编码 { return reader.ReadToEnd(); } } public static void Main() { string myString = "H4sIAAAAAAAAA+19CZAk11nmaNkNwiwswgYb8MZuWcZg2VPd+fJO2zIajUajQaPRMDPSqI1Bfpn5sirV1ZmlzKzpbi1s6AIHslcx8sHuGnsteS5pdPvSgY1kSWCMLVveIFgE+OAyp9fiCBMBG2bfkS+zqjr/7HqtntHBOByj7Lryy//97/+//3jv3XIiS0dFnPSuf3iQBriI0+QCEqUZOZDhJI/Z3/k77xjiop/gJXLvfJwUJEv45/DgeE5wFvRvO9rHef+2Y3mBC/LYcRywd4/svWzvkUWy+tixa0YkW73ugYyEo5Vt+WoSbE+T..."; try { string decodedText = DecodeGzipBase64(myString); Console.WriteLine("解码结果:"); Console.WriteLine(decodedText); } catch (Exception ex) { Console.WriteLine($"解码出错:{ex.Message}"); } } }
关键注意事项
- 一定要保证编码顺序:Base64解码 → Gzip解压 → 文本编码解析,顺序搞反或者跳过任意一步都会出错。
- 最后一步的
Encoding.UTF8要和原始压缩前的文本编码一致,如果解压后还是乱码,可以试试Encoding.ASCII或者Encoding.GetEncoding("GB2312")这类编码。 - 如果你的
myString末尾的...是手动截断的,记得传入完整的Base64字符串,否则解压时会抛出异常。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

