当前位置: 首页 > 面试题库 >

为什么在Java中使用request.getParameter()时字符损坏?

劳烨
2023-03-14
问题内容

我在JSP页面中有这样的链接,其编码为big5 http:// hello / world?name
=婀ㄉ
,当我在浏览器的URL栏中输入该链接时,它将被更改为类似
http:// hello / world?name = %23%24%23
而且,当我们想在jsp页面中获取此参数时,所有字符都已损坏。

并且我们已设置为:request.setCharacterEncoding(“ UTF-8”),因此所有请求都将转换为UTF8。

但是,为什么在这种情况下不起作用?提前致谢!。


问题答案:

在浏览器的地址栏中输入URL时,浏览器可能会在URL编码之前转换字符编码。但是,这种行为的定义不明确,请参阅我的问题,

在Tomcat上处理URI中的字符编码

我们大多在较新的浏览器上获得UTF-8和Latin-1,但在旧的浏览器中我们获得了各种编码(包括Big5)。因此,最好避免用户直接输入的URL中的非ASCII字符。

如果该URL嵌入在JSP中,则可以通过这样生成URL来将其强制为UTF-8,

String link = "http://hello/world?name=" + URLEncoder.encode(name, "UTF-8");

在Tomcat上,需要像这样在Connector上指定编码,

<Connector port="8080" URIEncoding="UTF-8"/>

您还需要使用request.setCharacterEncoding("UTF-8")主体编码,但是在servlet中进行设置是不安全的,因为仅当未处理参数但其他过滤器或阀门可能触发处理时才起作用。因此,您应该在过滤器中进行过滤。Tomcat在源代码发行版中附带了这样的过滤器。



 类似资料:
  • 问题内容: 在精确地探究Java标识符中允许使用哪些字符时,我偶然发现了一件非常奇怪的事情,以至于几乎可以肯定这是一个错误。 我预料地发现,Java标识符合他们开始与拥有的Unicode字符属性的要求,并其次是与物业,以授予领先的下划线和美元符号例外。事实并非如此,我发现与我所听说的那种普通标识符或其他任何想法都存在极大差异。 简短演示 请考虑以下演示,证明Java标识符中允许使用ASCII ES

  • 我有以下代码: 它输出。这是因为和是引用类型,“==”检查它们是否引用了相同的类型(它们不引用相同的类型)。 由于某种原因,它输出。这是为什么?字符串是引用类型,和引用不同的内存位置。我总是被告知,您需要使用才能工作,而这不是! 参见:https://ideone.com/cyje49 更新这不是一个重复的!我知道比较字符串的正确方法是使用

  • 问题内容: Java不能执行运算符重载,但可以用于和和其他一些类。这怎么可能? 更新: 为什么这样做? 问题答案: 不是操作员重载的示例。在语言中被内置为合并运算符 和 算术加法运算符。 这意味着用Java编写程序的人不能重载运算符,但是就Java语言的语法而言,它被定义为连接和加法运算符。 编辑 它适用于其他类,如和由于自动装箱。 如果您看一下执行字符串连接的Java程序的字节码,您会发现它创建

  • 问题内容: 为什么在Java中不使用const关键字? 您能看到在Java语法中使用某些可传递const或不可变关键字的任何缺点,还是为什么选择了常见的繁琐方法? 您能看到关闭请求的 原因 ,Sun提供了任何解释吗? 问题答案: 您能看到关闭请求的原因吗,Sun是否提供任何解释? 是。Sun在请求本身中提供了三个为什么不对请求执行操作的原因。我引用: “目前尚无计划将此功能添加到Java中。除了蔓

  • windows xp将授权标头中的SPNEGO令牌发送到我们的服务器,该服务器了解kerberos协议。服务器应用程序是使用java提供的gss api实现的。 我们的代码从spnego令牌中提取upn名称,并使用LDAP存储对其进行验证。如果upn名称只包含ascii字符(小于127),则一切正常。 但是,如果用户名包含非ascii字符(例如爱尔兰fada),那么java gss api出于某种

  • 我修改了一个phonegap插件。Java部分输出一个base64字符串: 然后我将它传递给某个Javascript,然后将字符串发送给服务器。我已经检查了.php文件接收到的字符串,base64字符串是相同的。然而,当我解码base64字符串时,它似乎已损坏。为了更好的示例,将此文本文件的内容复制到解码器中。 注意:当.php文件尝试解码它的数据:image/png;base64在前面时,我只是