gpt4 book ai didi

java - servlet请求参数字符编码

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:41 25 4
gpt4 key购买 nike

我有一个 Java servlet,它通过 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:

(//评论实际上并没有出现在日志中)

在我的 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 please ignore:”,每个字符的第一个字节是00。这在被 servlet 读取时被解释为一个空格,这解释了当消息被 servlet 记录时出现在每个字符之前的空格。

显然,我的目标只是在读取 text 请求参数时收到消息“TEST3 please ignore:”。我的猜测是我可以通过指定请求参数的字符编码来实现这一点,但我不知道该怎么做。

最佳答案

这样使用

new String(req.getParameter("<my request value>").getBytes("ISO-8859-1"),"UTF-8")

关于java - servlet请求参数字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com