• 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]; //正确! 这个地方应该是跟压缩时的编码对应上才对。 

  • 相关阅读:
    创业4
    创业3
    PowerBI开发 第十四篇:使用M公式添加列
    PowerBI开发 第十三篇:增量刷新
    PowerBI开发 第十二篇:钻取
    SSIS 连接数据
    SSIS 调试和故障排除
    SQL Server 日志和代理的错误日志
    SSIS 检查点(CheckPoint)内幕
    SSIS 如何处理逻辑类型的转换?
  • 原文地址:https://www.cnblogs.com/loserof/p/5622582.html
Copyright © 2020-2023  润新知