ICSharpCode.SharpZipLib.Zip 解析时报错System.NotSupportedException: No data is available for encoding 936
2024-10-21 09:52:52
分析原因
利用ICSharpCode.SharpZipLib.Zip进行APK解析时,因为APK内编译的名称为中文,查询微软开发文档936为gb2312中文编码
微软开发文档地址https://docs.microsoft.com/zh-cn/windows/win32/intl/code-page-identifiers
错误代码
using (ZipInputStream zip = new ZipInputStream(File.OpenRead(path)))
{
using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
// 出现错误部分
ZipFile zipfile = new ZipFile(filestream);
foreach (ZipEntry entry in zipfile)
{
if (entry != null)
{
if (entry.Name.ToLower() == "androidmanifest.xml")
{
manifestData = new byte[50 * 1024];
Stream strm = zipfile.GetInputStream(entry);
strm.Read(manifestData, 0, manifestData.Length);
}
if (entry.Name.ToLower() == "resources.arsc")
{
Stream strm = zipfile.GetInputStream(entry);
using (BinaryReader s = new BinaryReader(strm))
{
resourcesData = s.ReadBytes((int)entry.Size);
}
}
}
}
}
}
解决方法
using (ZipInputStream zip = new ZipInputStream(File.OpenRead(path)))
{
using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
// 在.Net Core中默认System.Text中不支持CodePagesEncodingProvider.Instance
// 添加下方这行代码允许访问.Net Framework平台上不支持的编码提供程序
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
ZipFile zipfile = new ZipFile(filestream);
foreach (ZipEntry entry in zipfile)
{
if (entry != null)
{
if (entry.Name.ToLower() == "androidmanifest.xml")
{
manifestData = new byte[50 * 1024];
Stream strm = zipfile.GetInputStream(entry);
strm.Read(manifestData, 0, manifestData.Length);
}
if (entry.Name.ToLower() == "resources.arsc")
{
Stream strm = zipfile.GetInputStream(entry);
using (BinaryReader s = new BinaryReader(strm))
{
resourcesData = s.ReadBytes((int)entry.Size);
}
}
}
}
}
}
最新文章
- iOS UISearchBar 设置取消按钮,回收键盘,并修改cancel为“取消”
- LayaAir引擎——(一)
- 查询SQLServer的启动时间
- 文件与目录的默认权限与隐藏权限【转vbird】
- HDU-2262 Where is the canteen 概率DP,高斯消元
- AOJ 0525 穷举
- 关于Resharper的使用经验
- C++库研究笔记——函数名的宏定义
- Brief introduction to Java String Split 【简单介绍下Java String Split】
- 基于Dubbo的http自动测试工具分享
- NVIDIA Geforce GT 730 OpenGL 图形显示异常花屏
- D3---01基础的柱状图制作(转)
- jquery源码 整体架构
- django在centos部署
- remote staging type or host is not specified
- BitAdminCore框架更新日志20180519
- redis的常用公共方法(2)
- kaggle _Titanic: Machine Learning from Disaster
- 推荐6款极具个性化的在线生成logo的网站
- git --mixed --soft --hard之间的区别