2012-02-20 19 views
1

我有這樣的字符串從音頻流的標題:如何用適當的編碼將' 336 362 340'值作爲普通文本來表示NSString?

THOA - Ïàäàòü

我知道這串俄語。我需要在UILabel中正確顯示它。 我試試這個:

NSData *data = [value dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

現在goodValue包含下一個值:

\ 336 \ 362 \ 340 - \ 317 \ 340 \ 344 \ 340 \ 362 \ 374

號碼我看到與原來保存的字符。但是,我應該如何將它轉換爲正常字符串作爲UILabel中的文本使用?

在此先感謝。

回答

3

我寫了一些代碼來迭代和記錄所有可能的組合。

起初,我發現所有可能的編碼的名單NSString.h並將其設置到C數組可能編碼的:

int encodings[] = { 
    NSASCIIStringEncoding, 
    NSNEXTSTEPStringEncoding, 
    NSJapaneseEUCStringEncoding, 
    NSUTF8StringEncoding, 
    NSISOLatin1StringEncoding, 
    NSSymbolStringEncoding, 
    NSNonLossyASCIIStringEncoding, 
    NSShiftJISStringEncoding, 
    NSISOLatin2StringEncoding, 
    NSUnicodeStringEncoding, 
    NSWindowsCP1251StringEncoding, 
    NSWindowsCP1252StringEncoding, 
    NSWindowsCP1253StringEncoding, 
    NSWindowsCP1254StringEncoding, 
    NSWindowsCP1250StringEncoding, 
    NSISO2022JPStringEncoding, 
    NSMacOSRomanStringEncoding, 
    NSUTF16StringEncoding, 
    NSUTF16BigEndianStringEncoding, 
    NSUTF16LittleEndianStringEncoding, 
    NSUTF32StringEncoding, 
    NSUTF32BigEndianStringEncoding, 
    NSUTF32LittleEndianStringEncoding 
}; 

現在讓我們來遍歷並顯示所有可能的結果:

int numberOfEncodings = 23; 

for (int i = 0; i < numberOfEncodings; i++) { 
    NSLog(@"=============== %d =============", encodings[i]); 
    constchar *asd = [value cStringUsingEncoding:encodings[i]]; 
    if (asd == NULL) { 
     NSLog(@"asd == NULL"); 
    } else { 
     for (int j = 0; j < numberOfEncodings; j++) { 
      NSString *str = [NSStringstringWithCString:asd encoding:encodings[j]]; 
      NSLog(@"%d: %@", encodings[j], str); 
     } 
    } 
} 

之後,我通過結果看,發現良好的字符串。這就是全部=)

注意:所有的編碼都是NSStringEncoding枚舉的值。你可以認爲你可以迭代0到編碼的數量,而不是定義編碼[]數組。但是你不應該這樣做,因爲編碼值不是遞增的整數。例如NSMacOSRomanStringEncoding = 30,其中一些編碼是另一個的別名。最好定義可能的編碼數組。

相關問題