Я работаю над разговором с библиотекой, которая обрабатывает строки как массивы wchar_t. Мне нужно преобразовать их в массивы символов, чтобы я мог передать их на Python (используя SWIG и Python-функцию PyString_FromString). Очевидно, что не все широкие символы могут быть преобразованы в символы. Согласно документации для wcstombs, я должен быть в состоянии сделать что-то вроде
wcstombs(NULL, wideString, wcslen(wideString))
для проверки строки на наличие необратимых символов - она должна возвращать -1, если таковые имеются. Тем не менее, в моем тестовом случае он всегда возвращает -1. Вот моя тестовая функция:
void getString(wchar_t* target, int size) {
int i;
for(i = 0; i < size; ++i) {
target[i] = L'a' + i;
}
printf("Generated %d characters, nominal length %d, compare %d\n", size,
wcslen(target), wcstombs(NULL, target, size));
}
Это генерирует вывод как это:
Generated 32 characters, nominal length 39, compare -1
Generated 16 characters, nominal length 20, compare -1
Generated 4 characters, nominal length 6, compare -1
Есть идеи, что я делаю не так?
В соответствующей заметке, если вы знаете способ конвертации непосредственно из wchar_t * s в строки Unicode Python, это будет приветствоваться. :) Спасибо!