2014-01-23 180 views
1

我在寫服務器 - 客戶端項目。服務器端是用Java開發的,而客戶端是用Python開發的。最近,當我嘗試通過套接字發送一個字符串時,服務器會在其中使用空格。比方說,我送:我怎樣才能擺脫「空白」

1:user:password 

在服務器端我使用一個字符串分割這一個字符串轉換成3個,第一個字符串(在這種情況下,「1」)將告訴服務器做什麼用剩下的(用戶名和密碼)。現在的問題是,當我打印的內容我在服務器端的插口得到我得到這樣的:

1 : u s e r : p a s s w o r d 

與每一個字符之間的白色空間。我試圖使用字符串函數replaceAll("\\s","")replaceAll("\\s+",""),但他們似乎沒有工作。在我用replaceAll("\\S","k")用大寫字母S,並意識到它實際上給我看:

kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 

所以我的結論是,這些「白空間」並不是真正的空格,因爲\\S替代「任何不是空格字符(包括字母和數字,以及標點符號等)「。

我的問題是:那些空白是什麼,我該如何擺脫它們?

在此先感謝。對不起,很長的職位。

+0

顯示客戶端寫入套接字和服務器從套接字讀取的代碼? – vanza

+0

我想,首先,你應該知道你真的通過套接字傳輸了哪些數據,一個帶有空格或沒有空格的字符串。如果python客戶端只發送ascii none-whitespace字符,那麼你的java服務器肯定有問題。 –

+0

我在發送之前打印出我發送的字符串,並且沒有任何空白。 – mapl93

回答

6

您很可能發送UTF-16(可能是UTF-16LE),但將其解碼爲UTF-8。 「空格」實際上是空值(零字節)。您需要在客戶端和服務器上使用相同的字符編碼。

+0

我該怎麼做? – mapl93

+0

我做了一些研究,是的,你是對的,他們是空字符,replaceAll(「\ 0」,「」)完美工作。非常感謝。 – mapl93

+0

@ mapl93這不是一個適當的修復,如果數據中有127個以上的字符,你仍然會有垃圾。 – hobbs