Windows 10/11环境下是否仍需设置CkZipW::put_OemCodePage属性?
在Windows 10/11环境下,创建包含日文等非ASCII文件名的ZIP文件时,通常不需要手动设置put_OemCodePage为65001,但仍需结合具体场景判断,以下是详细说明:
Windows系统对ZIP文件名的原生UTF-8支持
Windows 10 1903版本及以后,系统自带的ZIP处理组件(包括资源管理器)已经原生支持UTF-8编码的ZIP文件名。虽然系统内部默认用UTF-16处理字符串,但读写ZIP文件时会自动完成UTF-8编码的映射与识别,无需额外配置就能兼容非ASCII文件名。CkZipW::put_OemCodePage属性的设计初衷
这个属性主要是为了兼容旧版系统(比如Windows 7及更早)——这类系统默认不支持ZIP的UTF-8文件名,必须手动指定OEM代码页才能保证非ASCII文件名的正确编码。设置为65001(UTF-8)时,组件会强制使用UTF-8编码文件名,避免依赖系统默认的OEM代码页(比如日文系统的932)。测试中日文文件名正常的原因
你的测试环境是Win10/11,系统本身已经具备自动处理ZIP UTF-8文件名的能力。同时CkZipW组件在新版系统下可能做了适配:未指定put_OemCodePage时,会自动采用系统支持的UTF-8编码,或借助系统的字符映射能力,因此无论是否设置该属性,日文文件名都能正常存储和读取。需要手动设置的场景
如果你需要创建的ZIP文件要兼容旧版Windows系统(Win7及更早),或是要确保文件名编码严格为UTF-8(避免不同系统OEM代码页差异导致的乱码),仍建议手动设置put_OemCodePage为65001。另外,若应用需要跨平台兼容(比如在Linux/macOS下也能正常读取文件名),指定UTF-8编码也能规避编码不一致的问题。
内容的提问来源于stack exchange,提问作者Andrew Truckle

