0

Django で WWW インターフェイスを使用して C++ でアプリケーションを開発しています。これまでのところ、Linux で共有オブジェクトにコンパイルされた Boost.Python ラッパーを使用して、C++ でフレームワークを動作させています。

今、このフレームワークを 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を使用しています

4

1 に答える 1

2

このencodeメソッドを使用して、文字列を受け取る C++ コードに送信する前に、Unicode 文字列をバイト文字列に変換できます。

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

UTF-8エンコーディングは、Unicode 文字列の妥当なデフォルトです。が既に ASCII 文字列である場合cd["output"]、エンコーディングはそれを変更しません。バイナリ データが含まれている場合は、例外が発生します。

于 2012-09-10T18:09:12.800 に答える