質問

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

ここで送信される内容の概要は次のとおりです。

<!-- 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が拡張され、なぜUnicodeのcaracterは、C#側に表示されないのですか?

役に立ちましたか?

解決

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

。 XML宣言は、それはしかし、本当にUTF-16だとき、それはUTF-8であることを宣言している場合、

あなたは、潜在的な問題があるでしょう。

また、UTF-8を送信するために本当に C ++側で適切な符号化クラスを使用します。これは、余分な処理時間がかかりますが、通常はそれが考慮だ場合、帯域幅を節約するでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top