У меня есть сервлет Java, который получает данные из восходящей системы через HTTP GET-запрос. Этот запрос включает параметр с именем "текст". Если восходящая система устанавливает этот параметр в значение:
TEST3 please ignore:
Он отображается в журналах восходящей системы как:
00 54 00 45 00 53 00 54 00 33 00 20 00 70 00 6c //TEST3 pl
00 65 00 61 00 73 00 65 00 20 00 69 00 67 00 6e //ease ign
00 6f 00 72 00 65 00 3a //ore:
(комментарии//не отображаются в журналах)
В моем сервлете я прочитал этот параметр с помощью:
String text = request.getParameter("text");
Если я печатаю значение text
на консоли, оно выглядит как:
T E S T 3 p l e a s e i g n o r e :
Если я проверяю значение text
в отладчике, оно выглядит как:
\u000T\u000E\u000S\u000T\u0003\u0000 \u000p\u000l\u000e\u000a\u000s\u000e\u0000
\u000i\u000g\u000n\u000o\u000r\u000e\u000:
Итак, кажется, что проблема с кодировкой символов. Предполагается, что восходящая система использует UTF-16. Я предполагаю, что сервлет принимает UTF-8 и поэтому читает в два раза больше символов, которые должны быть. Для сообщения "TEST3, пожалуйста, игнорируйте": первый байт каждого символа 00
. Это интерпретируется как пространство при чтении сервлетом, что объясняет пространство, которое появляется перед каждым символом, когда сообщение регистрируется сервлетом.
Очевидно, моя цель - просто получить сообщение "TEST3, пожалуйста, проигнорируйте:", когда я прочитал параметр запроса text
. Я предполагаю, что я мог бы достичь этого, указав кодировку символов параметра запроса, но я не знаю, как это сделать.