static char CALLBACK __CFWin32EnumCodePageProc(LPTSTR string) { uint32_t encoding = CFStringConvertWindowsCodepageToEncoding(_tcstoul(string, NULL, 10)); CFIndex idx; if (encoding != kCFStringEncodingInvalidId) { // We list only encodings we know if (__CFWin32EncodingList) { for (idx = 0;idx < (CFIndex)__CFWin32EncodingIndex;idx++) if (__CFWin32EncodingList[idx] == encoding) break; if (idx != __CFWin32EncodingIndex) return true; __CFWin32EncodingList[__CFWin32EncodingIndex] = encoding; } ++__CFWin32EncodingIndex; } return true; }
static CFStringBuiltInEncodings GetEncoding(const tchar_t* From) { if (!From) return kCFStringEncodingUTF8; // use UTF-8 internally else if (!From[0]) return kCFStringEncodingASCII; // regular/default strings are ASCII else if (tcsicmp(From,T("ASCII"))==0) return kCFStringEncodingASCII; else if (tcsicmp(From,T("UTF-8"))==0) return kCFStringEncodingUTF8; else if (tcsicmp(From,T("UTF-16"))==0) return kCFStringEncodingUTF16; else if (tcsicmp(From,T("UTF-32"))==0) return kCFStringEncodingUTF32; else if (tcsnicmp(From,T("CP"),2)==0) return CFStringConvertWindowsCodepageToEncoding(atoi(From+2)); return (CFStringBuiltInEncodings)kCFStringEncodingInvalidId; }