ios 文字转码问题

  最近调用了一个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

posted on 2012-11-02 11:58  kelisi_king  阅读(384)  评论(0编辑  收藏  举报