Как расшифровать искаженные / бессмысленные символы в моей сетевой программе? - PullRequest
1 голос
/ 12 января 2010

Я работаю над сетевым клиент-серверным приложением в Java SE. Я использую строки, оканчивающиеся символом новой строки от клиента к серверу, и сервер отвечает пустой строкой, оканчивающейся нулем.
В окне вывода среды IDE Netbeans я нахожу некоторые бессмысленные символы среди строк, которые я отправляю и получаю.

Я не могу понять, что это за символы, которые в основном выглядят как прямоугольное поле, когда я вставляю эту строку, содержащую символ в Блокноте ++, все символы, следующие за ним, включая этот символ, исчезают.

Как узнать, какие символы появляются на выходном экране IDE?

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Если ответ, который вы получаете от сервера, должен быть читаемым человеком текстом, то, вероятно, это проблема кодировки символов. Например, если клиент и сервер написаны на Java, вероятно, они используют / предполагают разные кодировки символов для текста. (Также возможно, что ответ не должен быть читаемым человеком текстом. В этом случае клиент не должен пытаться интерпретировать его как текст ... так что этот вопрос спорный.)

Обычно вы видите блоки (знаки), когда программа пытается отобразить некоторый символьный код, который она не понимает. Это может быть реальный символ (например, японский символ, математический символ или тому подобное) или это может быть артефакт, вызванный несоответствием между наборами символов, используемыми для кодирования и декодирования текста.

Чтобы попытаться выяснить, что происходит, попробуйте изменить код на стороне клиента, чтобы прочитать ответ в виде байтов, а не символов, а затем вывести байты на консоль в шестнадцатеричном формате. Затем опубликуйте эти байты в вашем вопросе вместе с отображаемыми символами, которые вы видите в данный момент.

Если вы понимаете, как называть наборы символов, и у вас есть идеи о том, какими могут быть наборы символов, вам может пригодиться утилита UNIX / Linux iconv. Emacs имеет обширную поддержку для отображения / редактирования файлов в широком диапазоне кодировок символов. (Даже простой старый Wordpad может помочь, если это просто проблема с последовательностями завершения строки; например, "\ n" против "\ r \ n" против "\ n \ r".)

(Я бы не стал пытаться диагностировать это путем копирования и вставки. Процесс копирования и вставки может сам по себе «искажать» данные, вызывая дальнейшую путаницу.)

0 голосов
/ 12 января 2010

Это, вероятно, просто двоичные данные. Большая часть этого будет выглядеть как бред, когда интерпретируется как ascii . Убедитесь, что вы записываете точное число байтов в сокет, а не какое-то удобное число, например 4096. Лучше всего, если вы сможете опубликовать свой код, чтобы мы могли помочь вам найти ошибки.

...