diff --git a/src/App/DocumentObjectPyImp.cpp b/src/App/DocumentObjectPyImp.cpp index 03550c39b..7c74b48da 100644 --- a/src/App/DocumentObjectPyImp.cpp +++ b/src/App/DocumentObjectPyImp.cpp @@ -172,6 +172,20 @@ PyObject* DocumentObjectPy::setExpression(PyObject * args) getDocumentObjectPtr()->setExpression(p, shared_expr, comment); } + else if (PyUnicode_Check(expr)) { + PyObject* unicode = PyUnicode_AsEncodedString(expr, "utf-8", 0); + if (unicode) { + std::string exprStr = PyString_AsString(unicode); + Py_DECREF(unicode); + boost::shared_ptr shared_expr(ExpressionParser::parse(getDocumentObjectPtr(), exprStr.c_str())); + + getDocumentObjectPtr()->setExpression(p, shared_expr, comment); + } + else { + // utf-8 encoding failed + return 0; + } + } else throw Py::TypeError("String or None expected."); Py_Return; diff --git a/src/Gui/ExpressionBinding.cpp b/src/Gui/ExpressionBinding.cpp index 4795edb9e..7c7d54f32 100644 --- a/src/Gui/ExpressionBinding.cpp +++ b/src/Gui/ExpressionBinding.cpp @@ -112,7 +112,7 @@ bool ExpressionBinding::apply(const std::string & propName) if (!docObj) throw Base::Exception("Document object not found."); - Gui::Command::doCommand(Gui::Command::Doc,"App.getDocument('%s').%s.setExpression('%s', '%s')", + Gui::Command::doCommand(Gui::Command::Doc,"App.getDocument('%s').%s.setExpression('%s', u'%s')", docObj->getDocument()->getName(), docObj->getNameInDocument(), path.toEscapedString().c_str(),