1
shimanooo 2023-12-12 18:53:27 +08:00
解完自己转码文件名不行吗?
|
3
ysc3839 2023-12-12 18:59:49 +08:00 via Android
|
4
fyxtc OP @ysc3839 请教一下,链接代码块上面写着 Charsets for [ZipFile.extractToDirectory],是不是只针对 extractToDirectory 这个方法有效呢,我想在不解压 zip 的情况下,直接读取 zip 里面的图片,可以实现吗,我目前是使用 ZipDecoder().decodeBuffer(InputFileStream(zipPath)),然后碰到非 utf8 的就抛异常了 FormatException: Unexpected extension byte
|
5
fyxtc OP @ysc3839 咱们说的好像不是一个库,我用的是 https://pub.dev/packages/archive 这个😂
|
6
AoEiuV020JP 2023-12-12 19:58:03 +08:00
zip 自身不包含编码信息就挺坑的,我估计你只能,放弃那个库,
找找有没有国人写的,肯定就支持了, 最好得来个有猜测编码功能的库, |
7
fyxtc OP @AoEiuV020JP 问题是没有啊哈哈,最坏情况就是自己写了,他们那种猜测功能咋做的,比如 maczip 就能正常解码中文的,但是 mac 自带的就不行
|
8
AoEiuV020JP 2023-12-12 20:06:39 +08:00 1
@fyxtc #7 我看了一下那个库,已经有国人提 pr 了,但是半年没动静,你可以考虑直接使用这人未被合并的分支版本,
https://github.com/brendan-duncan/archive/pull/248 |
9
fyxtc OP @AoEiuV020JP 非常感谢!用他的包大部分都能解了,居然还有的解不出来,服了,zip 不指定编码真的坑
|
10
fyxtc OP @AoEiuV020JP 估计是 GB18030 编码的。。。gbk 解不动,真的醉了哈哈
|
11
cleanery 2023-12-13 09:58:43 +08:00
@AoEiuV020JP zip 自身是可以包含编码信息的, 但是不是强制的选项.
打包时, winrar 是默认带上的, 7zip 不是. 7zip 打包 zip 的时候,加上 -mu 参数, 就会用 unicode 保存 zip 文件名编码了 |
12
cleanery 2023-12-13 10:02:11 +08:00
|
13
cleanery 2023-12-13 10:04:43 +08:00
概括下是这个意思
如果不加 cu=on 7zip 打包 zip 的时候,会默认用 ANSI 保存文件名然后在额外区域保存 UTF-8 文件名 如果加了 cu=on 那么就只用 UTF-8 保存文件名 这样你在 linux 上就不会出错了 |
14
forcecharlie 2023-12-13 10:28:17 +08:00
ZIP 可以强制使用 UTF8 编码,这个时候在单个条目中会设置特殊的字段,其他时候就是 codepage ,一般而言与压缩和解压的代码页有关,如果你的是 CP936 ,压缩的 codepage 不是这个就可能乱码,正确的做法是 all UTF-8 ,但历史原因都做的不好,有一种解决方案,对文件名做编码检测,解压时自动转换,这个很少有 ZIP 解压软件做到。
利益相关:做包管理器解压 ZIP 刚好做过编码检测自动转换。 |
15
openmynet 2023-12-13 14:37:30 +08:00
如果会 rust 配合 flutter_rust_bridge 处理这些问题简直不要太香,zip 直接在 rust 层面做了
|