解密base64加密编码,部分中文乱码问题

niuniu00 2012-06-20 11:07:15
public static string DecompressGZip(string unCompressedString)
{
---unCompressedString 是压缩加密后的64编码
System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder();
byte[] writeData = new byte[4096];
//将string字符串解码(转换为等效的8位无符号整数数组)
byte[] bytData = System.Convert.FromBase64String(sunCompressedString);

int totalLength = 0;
int size = 0;
//解压缩基础流来创建zip流对象
Stream s = new GZipStream(new MemoryStream(bytData), CompressionMode.Decompress);
while (true)
{
size = s.Read(writeData, 0, writeData.Length);//从当前流读取字节序列
if (size > 0)
{
totalLength += size;
//追加字符串到uncompressedString的结尾处
uncompressedString.Append(System.Text.Encoding.UTF8.GetString(writeData, 0, size));
说明:循环期间每次循环的最后一个字如果是中文,那么这个中文在转换后就是乱码,中间的汉字没发现问题 }
else
{
break;
}
}
s.Close();//关闭流
return uncompressedString.ToString();//返回字符串
}


监狱以上问题,请高手帮忙解决,谢谢~!
...全文
1207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
4楼代码这个位置打错了,多了个 s
byte[] bytData = System.Convert.FromBase64String(unCompressedString);
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
这样写吧,原来是中文字符被截断所以乱码了
public static string DecompressGZip(string unCompressedString)
{
System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder();
byte[] writeData = new byte[4096];
//将string字符串解码(转换为等效的8位无符号整数数组)
byte[] bytData = System.Convert.FromBase64String(sunCompressedString);

int totalLength = 0;
int size = 0;
//解压缩基础流来创建zip流对象
Stream s = new GZipStream(new MemoryStream(bytData), CompressionMode.Decompress);
using (var ms = new MemoryStream())
{
var len = 0;
while ((len = s.Read(writeData, 0, writeData.Length)) > 0)
{
ms.Write(writeData, 0, len);
}
uncompressedString.Append(Encoding.UTF8.GetString(ms.ToArray()));
}
s.Close();//关闭流
return uncompressedString.ToString();//返回字符串
}
niuniu00 2012-06-20
  • 打赏
  • 举报
回复
unCompressedString 是utf8编码,没问题。
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
unCompressedString 这个字符串是怎么生成的?
caoqinghua 2012-06-20
  • 打赏
  • 举报
回复
检查unCompressedString是否是utf8编码
niuniu00 2012-06-20
  • 打赏
  • 举报
回复
不好意思 搞定了,using (Stream ms = new MemoryStream())写错了 应为
using (MemoryStream ms = new MemoryStream())
谢谢avphoneixi!
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
var len = 0;
该成
int len = 0;
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
using (var ms = new MemoryStream())
改成
using (MemoryStream ms = new MemoryStream())
niuniu00 2012-06-20
  • 打赏
  • 举报
回复
非常感谢4楼的思路,但是我用的vs2005中,在VS2005中var不能定义,并且 没有ms.Toarray()
我把using (var ms = new MemoryStream())
改为using (Stream ms = new MemoryStream())
但是ms.Toarray()
不认,应该怎么改呢这里

110,553

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧