すべての可能な組み合わせを反復してログに記録するためのコードをいくつか書きました。
最初に、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 列挙型の値です。そして、encodings[] 配列を定義する代わりに、0 からエンコーディングの数まで繰り返すことができると考えることができます。ただし、エンコーディング値は昇順の整数ではないため、これを行うべきではありません。たとえば、NSMacOSRomanStringEncoding = 30 と、このエンコーディングの一部は別のエイリアスです。可能なエンコーディングの配列を定義するよりも優れています。