FTP目录乱码用GBK

  NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);


  NSDictionary *  entryToAdd;

       entryToAdd = [self entryByReencodingNameInEntry:( NSDictionary *) thisEntry  encoding:gbkEncoding];




- (NSDictionary *)entryByReencodingNameInEntry:(NSDictionary *)entry encoding:(NSStringEncoding)newEncoding//转码,解决乱码问题

// CFFTPCreateParsedResourceListing always interprets the file name as MacRoman,

// which is clearly bogus <rdar://problem/7420589>.  This code attempts to fix

// that by converting the Unicode name back to MacRoman (to get the original bytes;

// this works because there's a lossless round trip between MacRoman and Unicode)

// and then reconverting those bytes to Unicode using the encoding provided.

{

    NSDictionary *  result;

    NSString *      name;

    NSData *        nameData;

    NSString *      newName;

    

    newName = nil;

    

    // Try to get the name, convert it back to MacRoman, and then reconvert it

    // with the preferred encoding.

    

    name = [entry objectForKey:(id) kCFFTPResourceName];

    

    if (name != nil) {

        assert([name isKindOfClass:[NSString class]]);

        

        nameData = [name dataUsingEncoding:NSMacOSRomanStringEncoding];

        if (nameData != nil) {

            newName = [[NSString alloc] initWithData:nameData encoding:newEncoding];

        }

    }

    

    // If the above failed, just return the entry unmodified.  If it succeeded,

    // make a copy of the entry and replace the name with the new name that we

    // calculated.

    

    if (newName == nil) {

        //assert(NO);                 // in the debug builds, if this fails, we should investigate why

        result = (NSDictionary *) entry;

    } else {

        NSMutableDictionary *   newEntry;

        

        newEntry = [entry mutableCopy];

        assert(newEntry != nil);

        

        [newEntry setObject:newName forKey:(id) kCFFTPResourceName];

        

        result = newEntry;

    }

    

    return result;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值