リンクされた質問が char* を扱っていることを除いて、私の質問はthis questionとほぼ同じですが、コードで std::string を使用しています。リンクされた質問のように、ターゲット言語として C# も使用しています。
私はC++で書かれたクラスを持っています:
class MyClass
{
public:
const std::string get_value() const; // returns utf8-string
void set_value(const std::string &value); // sets utf8-string
private:
// ...
};
そして、これは C# の SWIG によって次のようにラップされます。
public class MyClass
{
public string get_value();
public void set_value(string value);
}
SWIG は、MyClass の呼び出し中に utf8 から utf16 への文字列変換を行わないことを除いて、私の代わりにすべてを行います。私の文字列は ASCII で表現できる場合はうまくいきますが、「set_value」と「get_value」の往復で非 ASCII 文字を含む文字列を渡そうとすると、理解できない文字になってしまいます。
C#でSWIGがUTF-8でエンコードされたC++文字列をラップするようにするにはどうすればよいですか? nb std::wstring ではなく、char* ではなく、std::string を使用しています。
SWIG sourceforge サイトには部分的な解決策がありますが、std::string ではなく char* を処理し、(構成可能な) 固定長バッファーを使用します。