我编写了一些代码来迭代和记录所有可能的组合。
起初,我在 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 并且其中一些编码是另一个的别名。比定义可能的编码数组更好。