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

  • 相关阅读:
    7.15 更改累计和中的值
    7.10 计算中间值
    7.11 求总和的百分比
    7.9 计算模式
    7.8 计算累计差
    7.4 求一个表的行数
    7.6 生成累计和
    7.7 生成累积乘积
    7.2 求某列中的最小、最大值
    7.3 对某列的值求和
  • 原文地址:https://www.cnblogs.com/loserof/p/5622582.html
Copyright © 2020-2023  润新知