2014-01-23 4 views
1

Я пишу сервер-клиентский проект. Серверная сторона разрабатывается на Java, а клиентская сторона - на Python. Недавно, когда я пытаюсь отправить строку через сокет, сервер получает его с пробелами в нем. Скажем, я посылаю:Как я могу избавиться от «белых пробелов»

1:user:password 

на стороне сервера я использую строку разделить, чтобы преобразовать эту одну строку в 3, первую строку (в данном случае «1») сообщит серверу, что делать с остальными (имя пользователя и пароль). Теперь проблема заключается в том, что когда я печатаю то, что я получаю от розетки на стороне сервера я получаю что-то вроде этого:

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

с белыми промежутками между каждым символом. Я попытался использовать функцию String replaceAll("\\s","") и replaceAll("\\s+",""), но они, похоже, не работали. Я использовал replaceAll("\\S","k") с большой буквы, и понял, что он на самом деле показал мне:

kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 

Так я к выводу, что эти «белые пространства» не являются на самом деле белые пространства, потому что \\S заменяет «все, что не является символом пробела (включая буквы и цифры, а также пунктуацию и т. д.) ».

Мой вопрос: что это за пробелы, и как я могу избавиться от них?

Заранее спасибо. Извините, за длинную статью.

+0

Код, отображающий запись клиента в сокет и чтение сервера из сокета? – vanza

+0

Я думаю, сначала вам нужно выяснить, какие данные вы действительно переносите через сокет, строку со словом или без пробелов. Если клиент python отправляет только символы ascii без пробелов, то с вашим java-сервером должно быть что-то не так. –

+0

Я печатаю строку, которую я отправляю, прежде чем отправить ее, и все в порядке, без пробелов. – mapl93

ответ

6

Скорее всего вы отправляете UTF-16 (возможно, UTF-16LE), но декодируете его как UTF-8. «Пробелы» на самом деле являются нулями (нулевые байты). Вам нужно использовать одну и ту же кодировку символов на клиенте и на сервере.

+0

Как я могу это сделать? – mapl93

+0

Я провел некоторое исследование, и да, вы были правы, они были пустыми символами, replaceAll («\ 0», «») отлично работали. БОЛЬШОЕ СПАСИБО. – mapl93

+0

@ mapl93 это не правильное исправление, у вас все еще будет мусор, если в данных есть символы выше 127. – hobbs

Смежные вопросы