2011-02-25 47 views
0

我使用TCP套接字從服務器向客戶端發送xml序列化對象。將字節數組轉換爲xml字符串時遇到了一些問題。我不知道如果我沒有使用正確的解碼器,但當字節數組在客戶端收到時,xml字符串前綴爲'?'。因此,我的XML字符串的第一行變得像?<?xml version="1.0" encoding="utf-8"?>,我不能反序列化,因爲它不再是一個有效的XML。通過.net套接字發送XML序列化對象

我嘗試了UTF-8和Ascii編碼。

任何輸入將不勝感激。

感謝,

Bibek Dawadi

+0

您能否顯示與從套接字發送和接收數據有關的代碼? –

回答

0

ASCII將取代無法識別的字節,?。這可能是正在發生的事情。

從問題中很難判斷問題出在哪裏;張貼您的發送和接收代碼將有所幫助。我也有一些建議on my blog通過TCP/IP發送XML。

+0

謝謝斯蒂芬。但是我不能將XML直接轉換爲byte [],因爲我正在使用delemiter實現消息幀。這就是爲什麼我序列化對象,獲取XML字符串,前綴和後綴這個XML字符串與delemiter有新的字符串,轉換爲字節[],然後通過TCP/IP套接字發送它。雖然將最終字符串轉換爲byte [],但我正在使用UTF-8編碼,同時將byte []轉換回字符串,我也使用UTF-8編碼。 – Bikswan

1

如果你得到一個?在字符串前面意味着你已經將它保存爲UTF8。您很可能已經序列化爲UTF(UTF8?),但在某些時候您將其轉換爲ASCII。我會在收到後猜測。

避免將它轉換爲任何地方的string並直接在byte-array上工作,而應該沒問題。背景:
Wikipedia article on UTF8
ASCII僅爲7位字節,因此在轉換爲ASCII時,128-255範圍內的任何字節都會被替換。
RFC3629:請參閱第6節:BOM

+0

實際上,BOM是UTF-8中的三個字節,所以它會顯示爲'???'。 –

+0

但我不能讓XML直接轉換爲byte [],因爲我正在使用delemiter實現消息幀。這就是爲什麼我序列化對象,獲取XML字符串,前綴和後綴這個XML字符串與delemiter有新的字符串,轉換爲字節[],然後通過TCP/IP套接字發送它。雖然將最終字符串轉換爲byte [],但我正在使用UTF-8編碼,同時將byte []轉換回字符串,我也使用UTF-8編碼。 – Bikswan

相關問題