SharpZipLib设置Zip归档编码注释失败,希腊字符显示异常
解决Zip文件注释希腊字符显示为问号的问题
核心原因:Zip格式默认采用CP437编码存储注释,无法兼容希腊字符这类非ASCII字符。
ZipCryptoEncoding属性仅用于加密文件名的编码,和注释无关,所以之前的设置无效。解决方案1(通用版本):
设置UseUnicodeAsNecessary为true,让库自动检测非ASCII字符并使用UTF-8编码存储注释,同时标记Zip文件头的Unicode支持位:using var fs = File.Create(fileName); using var zs = new ZipOutputStream(fs); zs.SetLevel(0); zs.UseUnicodeAsNecessary = true; // 关键配置 zs.SetComment(JsonConvert.SerializeObject(data1, data2));解决方案2(新版本DotNetZip):
若使用了带StringCodec的构造函数,需明确指定UTF-8编解码器,而非StringCodec.Default:using var fs = File.Create(fileName); using var zs = new ZipOutputStream(fs, StringCodec.UTF8); // 指定UTF-8编解码器 zs.SetLevel(0); zs.SetComment(JsonConvert.SerializeObject(data1, data2));验证提示:
需用支持UTF-8 Zip注释的工具(如7-Zip、WinRAR最新版)打开文件,部分旧工具可能仍不识别UTF-8编码的注释;同时确认JsonConvert.SerializeObject输出的字符串本身包含正确的希腊字符,未提前乱码。
内容的提问来源于stack exchange,提问作者L_A_Hooper
相关产品推荐
相关产品推荐

