2012-12-17 3 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 уже предоставил то, что я считаю правильным ответом); в какао преобразование в строку - это атомный акт, который начинается с капли данных - нет аналога установки кодировки входящего потока. – Tommy

ответ

1

Это мо re или less перевод вашего кода с 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 loop» никогда не закончится 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];

Смежные вопросы