我有一个Java Servlet,通过HTTP GET请求从上游系统接收数据。该请求包含一个名为"text"的参数。如果上游系统将该参数设置为:
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:
(注释实际上不会出现在日志中)
在我的servlet中,我使用以下代码读取此参数:
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。我猜测Servlet假定为UTF-8,因此读取的字符数是实际字符数的两倍。对于消息“TEST3请忽略:”,每个字符的第一个字节是
00
。当Servlet读取时,这被解释为空格,这解释了在Servlet记录消息时出现在每个字符之前的空格。显然,我的目标只是在读取
text
请求参数时获得消息“TEST3请忽略:”。我猜想可以通过指定请求参数的字符编码来实现这一点,但我不知道如何做到这一点。