Я написал код для итерации и регистрации всех возможных комбинаций.
Сначала я нашел список всех возможных кодировок в 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 до количества кодировок вместо определения массива encodings [].Но вы не должны этого делать, потому что значения кодирования не являются восходящими целыми числами.Например, NSMacOSRomanStringEncoding = 30 и некоторые из этих кодировок являются псевдонимами для другого.Чем лучше определить массив возможных кодировок.