2012-09-10 38 views
0

我在C++中用Django中的WWW接口开发了一个应用程序。 到目前为止,我已经在C++中使用Boost.Python包装器编译为Linux中的共享对象。如何将Django unicode转换为C++ std :: string

现在我尝试在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

回答

2

可以使用encode方法将其发送给还需要一个字符串的C++代码之前将Unicode字符串转换为字节字符串:

s.setOutput(cd["output"].encode("utf-8")) 

对于Unicode字符串,UTF-8编码是合理的默认值。如果cd["output"]已经是ASCII字符串,编码不会改变它;如果它包含二进制数据,你会得到一个异常。

+0

不幸的是,当我这样做,没有任何反应,但没有错误。我甚至把printf放在setOutput中,它不会打印任何东西。就好像setOutput根本没有被调用。 – eclipse

+0

你的答案有窍门。以前的错误是由于服务器配置错误。 – eclipse

+0

另一个有趣的尝试是将函数重载为接受'std :: wstring'。如果Boost.Python足够聪明,可以生成一个自动将'str'转换为'std :: string'的包装器,那么它可以将'unicode'转换为'std :: wstring'。 – user4815162342