2

現在、ソケットを介して C# アプリケーションと通信する C++ アプリケーションを構築しています。私の C++ アプリは、ソケット経由で wchar_t* を送信します。

send の概要は次のとおりです。

<!-- Normal xml file-- 

反対側で受け取るものは次のとおりです(バイト配列にstream.readを実行し、UTF8Encoding.GetString()を使用してバイト配列を読み取り可能な文字列に変換します)

<\0!\0-\0-\0 \0N\0o\0r\0m\0a\0l\0 \0x\0m\0l\0 \0f\0i\0l\0e\0-\0-

マーシャリングの問題ですか?あなたは何を言っていますか?拡張が 0 で、C# 側で Unicode 文字が表示されないのはなぜですか?

4

1 に答える 1

5

UTF-8ではなくUTF-16を送信しているように見えますが、これは理にかなっています-wchar_t基本的には16ビットタイプ(Windowsの場合)であり、私が知る限り、「生」で送信しています。XDocumentデータをorに変換する場合はXmlDocument、バイナリ データを使用することをお勧めします。フレームワークは、XML ファイル (IIRC) の UTF-16 を自動検出する方法を認識しています。

ただし、実際には UTF-16 であるのに、XML 宣言で UTF-8 と宣言されていると、問題が発生する可能性があります。

または、C++ 側で適切なエンコーディング クラスを使用して、純粋に UTF-8 を送信します。これには余分な処理時間がかかりますが、それが考慮されている場合、通常は帯域幅を節約できます。

于 2009-06-03T15:07:49.860 に答える