Я разрабатываю приложение на C ++ с WWW-интерфейсом в Django.
До сих пор у меня есть рабочий фреймворк на C ++ с оболочкой Boost.Python, скомпилированной в общий объект в Linux.
Сейчас я пытаюсь запустить этот фреймворк в Django. Когда я передаю строку из формы «CharField», я получаю эту ошибку:
Python argument types in
CoreSystem.setOutput(CoreSystem, unicode)
did not match C++ signature:
setOutput(CoreSystem {lvalue}, std::string)
Ответственный за это код здесь:
form = AnalyzeForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
s.setOutput(cd["output"])
где s это объект CoreSystem. Если я наберу это так:
s.setOutput("DatabaseOutput")
это работает отлично. Я также использовал str (cd [«output»]), но после этого ничего не происходит.
Я использую Django 1.4.1 и Python 2.7.3
Вы можете использовать encode
метод для преобразования строки Unicode в строку байтов перед отправкой ее в код C ++, который ожидает строку:
s.setOutput(cd["output"].encode("utf-8"))
UTF-8
кодировка является разумным значением по умолчанию для строк Unicode. Если cd["output"]
уже является строкой ASCII, кодировка не изменит ее; если он содержит двоичные данные, вы получите исключение.
Других решений пока нет …