Найти - Пользователи
Полная версия: Boost.Python под Python 3.1 проблема с юникодом
Начало » Python для экспертов » Boost.Python под Python 3.1 проблема с юникодом
1 2
HexRx
Собрал Boost под Python 3.1 и решил сделать модуль
Вот C++ код:
#include <boost/python.hpp>

using namespace boost::python;

char const* greet()
{
return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
def("greet", greet);
}
При попытке вызвать модуль из питона вылетает ошибка:
Traceback (most recent call last):
File "<string>", line 247, in run_nodebug
File "test.py", line 1, in <module>
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 30-31: invalid data
Вот питоновский код вызова:
import hello_ext

print(hello_ext.greet())
Собственно что я делаю не так? Под Python 2.6 все отлично пашет :)
Андрей Светлов
Собственно, все так. И оно работает.
Что поломалось у вас - не знаю.
Как понимаю, boost собирали сами. Что говорять тесты?
Хотя бы примитивный
cd ./libs/python/example/quickstart
bjam –verbose-test test
HexRx
Выполнил
Андрей Светлов
cd ./libs/python/example/quickstart
bjam –verbose-test test
Создался модуль extending.pyd, пробовал обратится к нему из питона, все отлично работает :D
Сделал копипаст extending.cpp в свой проект и все равно та же самая ошибка, наверно что то не так с настройками проекта в Visual Studio :/
Андрей Светлов
bjam -d+2 -n test
не будет ничего запускать, зато покажет, с какими опциями компилировалось/линковалось.
В MSVC, насколько помню, можно было из менюшек настройки посмотреть получившиеся command line flags.
Сравните и найдите три отличия.
HexRx
Андрей Светлов
bjam -d+2 -n test
Не нашел там упоминания о файле extending.pyd, выполнил “bjam -n test” и там его отыскал :)
Подкорректировал линкер под линковку bjam, но это нечего не дало.. Перерыл все настройки проекта - все равно нечего.. Пробовал вставлять свой код в extending.cpp и скомпилить с помощью bjam - модуль работает. Уже не знаю что и менять :|

upd: Залил свой проект в аттач (в проект включены необходимые инклуды для Boost Python). Пожалуйста гляньте :rolleyes:
Андрей Светлов
Аттачи на этом форуме никогда не работали :)
Разница может быть в настройках компилятора, а не только линкера.
Первое, что приходит в голову - есть какой-то флажок касательно wchar_t.
Подробностей не помню.
Ваш проект мне ничего не даст - у меня linux, винды и студии нет, проверить не на чем.
Кстати, надеюсь вы используете VS 2008?
HexRx
Андрей Светлов
Аттачи на этом форуме никогда не работали :)
Я уже заметил что они не работают :)
Андрей Светлов
Кстати, надеюсь вы используете VS 2008?
Конечно 2008 :D
Андрей Светлов
Первое, что приходит в голову - есть какой-то флажок касательно wchar_t.
Буду что то подобное искать :P
HexRx
Ппц, слов нету.., проблема была настолько банальна - в пути к модулю были русские буквы :lol: :lol: :lol:
Андрей Светлов, спасибо что помогал с решением проблемы :)
Андрей Светлов
Заработало - хорошо.
Только, кажется, проблема идентифицированна неверно. Все должно было пройти и с русскими буквами. Я когда-то проверял.
Единственное, чего питон не умеет - это работать с pyd названным по русски.
И не научится, наверное, никогда - точка входа это функция init<имя модуля>; кодировка исключительно ascii - по другому С/С++ не поймет.
Русский путь к файлу .pyd отрабатывает нормально.
HexRx
Андрей Светлов, только что запустил модуль из англ папки - запустился, потом переименовал папку на русский - ошибка “UnicodeDecodeError: ‘utf8’ codec can't decode bytes in position 30-31: invalid data” =) Также работают и стандартные pyd.
Может быть такие проблемы только с виндой?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB