Swig связывание для Python с использованием UCS-4 - PullRequest
4 голосов
/ 17 августа 2011

Кто-нибудь знает, есть ли способ сделать SWIG-кодирующие строки как UCS-4 для Python? В документации SWIG говорится, что это возможно при использовании карт типов, но не приводятся никакие другие детали или примеры.

Для контекста, я работаю над расширением программного обеспечения Blender 3D набором скриптов Python. Нам нужно связать эти сценарии с различными робототехническими программами, мы делаем это с помощью SWIG для компиляции библиотек Python. Blender использует свой собственный Python 3.2, предварительно скомпилированный с опцией --with-wide-unicode, поэтому он использует строки Unicode UCS-4. Однако по умолчанию SWIG кодирует строки как UCS-2, и поэтому при взаимодействии с Blender'ом я всегда получаю сообщение об ошибке: «undefined symbol: PyUnicodeUCS2 _ *».

1 Ответ

1 голос
/ 09 января 2012

Это из документов SWIG, может быть, вы видели это:

В настоящее время SWIG предоставляет ограниченную поддержку Юникода и широких символов (тип C wchar_t). Некоторые языки предоставляют карты типов для wchar_t, но имейте в виду, что они могут не переноситься в разные операционные системы. Это деликатная тема, которая плохо понимается многими программистами и не реализована единообразно в разных языках. Для тех языков сценариев, которые обеспечивают поддержку Unicode, строки Unicode часто доступны в 8-битном представлении, таком как UTF-8, которое может быть сопоставлено с типом char * (в этом случае интерфейс SWIG, вероятно, будет работать). Если программа, которую вы упаковываете, использует Unicode, нет гарантии, что символы Unicode на целевом языке будут использовать одно и то же внутреннее представление (например, UCS-2 против UCS-4). Возможно, вам придется написать некоторые специальные функции преобразования.

Похоже, вы должны сопоставить его с символом *, а затем выяснить, как вручную преобразовать его при необходимости. Звучит так, будто для начала это грязно.

...