Тестирование wchar_t * для конвертируемых символов - PullRequest
1 голос
/ 26 августа 2011

Я работаю над разговором с библиотекой, которая обрабатывает строки как массивы 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, это будет приветствоваться. :) Спасибо!

1 Ответ

0 голосов
/ 26 августа 2011

Ясно, что, как вы обнаружили, важно завершить входные данные нулем.

Что касается последнего абзаца, я бы преобразовал из широкоформатного формата в UTF8 и вызвал бы PyUnicode_FromString .

Обратите внимание, что я предполагаю, что вы используете Python 2.x, возможно, в Python 3.x все по-другому.

...