2009-06-03 27 views
2

我目前正在構建一個C++應用程序,通過套接字與C#應用程序進行通信。 我的C++應用程序通過套接字發送wchar_t *。從C++ wchar_t到C#通過套接字char#

這裏是什麼派的概述:

<!-- 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#端?

回答

5

看起來它發送的是UTF-16,而不是UTF-8,這很合理 - wchar_t基本上是一個16位的類型(在Windows中),並且您將它發送到「原始」,據我所知。我建議如果您要將數據轉換爲XDocumentXmlDocument,則需要使用二進制數據 - 該框架知道如何自動檢測XML文件(IIRC)的UTF-16。

如果XML聲明實際上是UTF-16,則聲明它爲UTF-8時,您可能會遇到問題。

或者,在C++端使用合適的編碼類別真正發送UTF-8。這將需要額外的處理時間,但如果這是一個考慮因素,通常會節省帶寬。