2014-01-23 120 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