最近调用了一个Unrar4iOS的开源库,解压rar文件,在调用了NSArray *files = [unrar unrarListFiles]将rar文件的文件结构解析赋给一个数组后,用NSlog(@"files is:%@",files); 输出的是一些\U00d3\U00de(表示一个汉字)之类的字符串,经研究确定为EUC-CN编码 而不是GB2312。
然后直接NSlog(@"%@",[files objectAtIndex:[files count]-1])时,得到的是н¨(为西欧 IS0 8859-1 编码)对应的 GB2312或者EUC-CN编码 为 汉字“新建”两个字。
再转为汉字:下面是解决方法:
1 NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_CN); 2NSStringEncoding isoEncoding= CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin1); 4 5 NSData *name = [[files objectAtIndex:[files count]-1]dataUsingEncoding:isoEncoding]; 6 NSString *fold_name = [[NSString alloc]initWithData:name encoding:gbkEncoding ];
2012.12.27
想的太简单,文件名在不同的环境下编码方式可能产生差异,在这仅局限于一种编码,当换为其他编码时就产生问题。
直接给一段中文汉字就判断出其编码方式太过复杂。打开txt乱码可以用下面一种方法实现:(原理:bom头)
不同编码的字节顺序标记的表示
编码 | 表示 (十六进制) | 表示 (十进制) |
---|---|---|
UTF-8 | EF BB BF | 239 187 191 |
UTF-16(大端序) | FE FF | 254 255 |
UTF-16(小端序) | FF FE | 255 254 |
UTF-32(大端序) | 00 00 FE FF | 0 0 254 255 |
UTF-32(小端序) | FF FE 00 00 | 255 254 0 0 |
UTF-7 | 2B 2F 76和以下的一个字节:[ 38 | 39 | 2B | 2F ] | 43 47 118和以下的一个字节:[ 56 | 57 | 43 | 47 ] |
en:UTF-1 | F7 64 4C | 247 100 76 |
en:UTF-EBCDIC | DD 73 66 73 | 221 115 102 115 |
en:Standard Compression Scheme for Unicode | 0E FE FF | 14 254 255 |
en:BOCU-1 | FB EE 28及可能跟随着FF | 251 238 40及可能跟随着255 |
GB-18030 | 84 31 95 33 | 132 49 149 51 |