【问题标题】:How can I get rid of "white spaces"我怎样才能摆脱“空白”
【发布时间】:2014-01-23 12:18:58
【问题描述】:

我正在编写服务器-客户端项目。服务器端使用 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 替换了“任何不是空格字符(包括字母和数字,以及标点符号等) ”。

我的问题是:这些空白是什么,我怎样才能摆脱它们?

提前致谢。对不起,很长的帖子。

【问题讨论】:

  • 显示客户端写入套接字和服务器从套接字读取的代码?
  • 我认为,首先,您应该找出您真正通过套接字传输的数据,带空格或不带空格的字符串。如果 python 客户端只发送 ascii 非空白字符,那么你的 java 服务器一定有问题。
  • 我在发送之前打印我要发送的字符串,一切正常,没有空格。

标签: java python string sockets whitespace


【解决方案1】:

您很可能发送的是 UTF-16(可能是 UTF-16LE),但将其解码为 UTF-8。 “空格”实际上是空值(零字节)。您需要在客户端和服务器上使用相同的字符编码。

【讨论】:

  • 我做了一些研究,是的,你是对的,它们是空字符,replaceAll("\0","") 工作得很好。非常感谢。
  • @mapl93 这不是一个正确的修复方法,如果数据中有任何超过 127 的字符,您仍然会有垃圾。
  • 在我找到在服务器和客户端上获得相同字符编码的方法之前,我将保持这种状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2021-01-27
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-12-18
相关资源
最近更新 更多