2012-12-17 20 views
5

在Java中我可以得到所有的可用编码与此代码:Objective-C中如何列出所有可用的编码

SortedMap<String, Charset> availableCharsets = Charset.availableCharsets(); 
Vector allEncodes = new Vector(); 
for (Map.Entry<String, Charset> entry : availableCharsets.entrySet()) { 
      allEncodes.add(entry.getKey()); 
} 

然后,我可以读任何编码任何文件,我想:

Reader in = new InputStreamReader(new FileInputStream(aPath), allEncodes.get(0)); 

那么,有没有任何想法如何在Objective-C实现这个

+2

如果我敢做非严格无关的评论(因为JWWalker已经提供了我认为是正确的答案);在Cocoa中,转换为字符串是一种以一团数据开始的原子动作 - 没有在输入流上设置编码的模拟。 – Tommy

回答

1

这是莫从Java转换或更少的代码。您还需要完成代码检查readingError变量。当然,中心点是avaiableStringEncodings静态消息。

NSMutableArray *arrayOfEncodings = [[NSMutableArray alloc] init]; 

    const NSStringEncoding *encodings = [NSString availableStringEncodings]; 
    while (*encodings != 0){ 
    [arrayOfEncodings addObject:[NSNumber numberWithInt:*encodings]]; 
    encodings++; 
    } 

    NSError *readingError = nil; 
    NSString yourPath = @"some path you want"; 
    NSData *data = [[NSData alloc] initWithContentsOfFile:yourPath options:NSDataReadingUncached error:&readingError]; 

    NSStringEncoding firstEncoding = (NSStringEncoding) [((NSNumber *) [arrayOfEncodings objectAtIndex:0]) intValue]; 

    NSString *myString = [[NSString alloc] initWithData:data encoding:firstEncoding]; 
+0

1>“while循环”永远不会结束2> [link](http://img96.imageshack.us/img96/3034/screenshot20121218at109.png) – Hizabr

+0

对不起,我用Xcode编辑代码。我现在用IDE进行测试,没关系。 – giampaolo

+0

再次检查答案,因为我大致翻译了Java代码。在数组中也存在负值。我认为这是来自CFStringEncodingExt.h。过滤正值,如果你只想从NSStringEncoding – giampaolo

3

const NSStringEncoding* encodingArray = [NSString availableStringEncodings];

相关问题