zoukankan      html  css  js  c++  java
  • zip 中文文件夹为空问题

    这个问题原因是Ios版本的ZipArchive工程中,编码格式变为UTF-8.然后windows上的编码格式多数是GBK。

    那么打开ZipArchive的源码,改变编码方式就行了。

    找到函数:

    -( BOOL ) addFileToZip:( NSString *) file newname:( NSString *) newname

    {

    if ( [ _password length ] == 0 )

    {

    zipOpenNewFileInZip ( _zipFile ,

    ( const char *) [newname UTF8String ],// UTF-8方式编码

    &zipInfo,

    NULL , 0 ,

    NULL , 0 ,

    NULL , //comment

    Z_DEFLATED ,

    Z_DEFAULT_COMPRESSION );

    }

    }

    将上述代码中划线部分,替换为下面部分即可。

     ( const char *) [newname cStringUsingEncoding :CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000 )]

    原因是:ZipArchive类的解压函数 -(BOOL) UnzipFileTo:(NSString*) path overWrite:(BOOL) overwrite 
    在遍历压缩文件包,获取包文件的名字处理上存在Bug. 

    1.  下面两行代码获取包中当前文件的文件名 
        unzGetCurrentFileInfo(_unzFile, &fileInfo, filename, fileInfo.size_filename + 1, NULL, 0, NULL, 0); 
        filename[fileInfo.size_filename] = '';  //未尾追加0 结束 

            此时获取的文件名是正确的. 

    2.     但是由char*获取得到NSString*的转换方法使用出错,Mac默认是按UTF8编码的 

        //NSString * strPath = [NSString  stringWithCString:filename];       //此处得到的 strPath为空,导致函数返回YES,但目录下无文件 

    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); 
            NSString * strPath = [NSString  stringWithCString:filename encoding:enc]; //正确! 这个地方应该是跟压缩时的编码对应上才对。 

  • 相关阅读:
    PowerDesigner小技巧(整理中)
    将日志(Microsoft.Extensions.Logging)添加到.NET Core控制台应用程序
    VMware Workstation Pro 15.5.0 官方版本及激活密钥
    Git 设置和取消代理(SOCKS5代理)
    笔记
    哈希表(Hash Table)与哈希算法
    Elasticsearch分词
    微服务理论
    Elasticsearch与Mysql数据同步
    go语言常用命令
  • 原文地址:https://www.cnblogs.com/loserof/p/5622582.html
Copyright © 2011-2022 走看看