При попытке конвертировать существующий код для поддержки символов Юникода эта проблема всплыла. Если я попытаюсь передать символ Unicode (в данном случае я использую символ евро) в любую из функций * wprintf, это не удастся, но, по-видимому, только в xcode. Тот же код отлично работает в visual studio, и я даже смог найти друга, который успешно протестировал его с gcc на linux. Вот код нарушения:
wchar_t _teststring[10] = L"";
int _iRetVal = swprintf(_teststring, 10, L"A¥€");
wprintf(L"return: %d\n", _iRetVal);
// print values stored in string to check if anything got corrupted
for (int i=0; i<wcslen(_teststring); ++i) {
wprintf(L"%d: (%d)\n", i, _teststring[i]);
}
В xcode вызов swprintf вернет -1, в то время как в visual studio он завершится успешно и продолжит выводить правильные значения для каждого из 3 символов (65, 165, 8364).
Я гугле долго и упорно решений, одно из предложений, которое появилось несколько раз используют вызов таких как:
setlocale(LC_CTYPE, "UTF-8");
Я пробовал различные комбинации аргументов с этой функцией, но безуспешно, при дальнейшем исследовании она возвращает нулевое значение, если я пытаюсь установить для локали любое значение, отличное от значения по умолчанию "C".
Я в недоумении относительно того, что еще я могу попытаться решить эту проблему, и тот факт, что он работает в других компиляторах / платформах, только делает его еще более неприятным. Любая помощь будет высоко ценится!
EDIT:
Просто подумал, что я хотел бы добавить, что при сбое вызова swprintf устанавливается код ошибки (92), который определяется как:
#define EILSEQ 92 /* Illegal byte sequence */