通过URL Java发送特殊字符



说我有一个带有"é"的字符串,我想通过URL将其发送到下一个控制器,字符被编码为%c3%a9,当它是在另一个控制器中接收到,它被解码为"â©"。我的问题是,如何在URL上编码"é",因此当它在另一个控制器中收到时,它将被解码为"é"?现在,我正在手动更换它们。我需要一种自动和任何特殊特征(éèà...)的方法谢谢。

不幸的是,没有办法声明URL数据的编码。常用的编码曾经是ISO-8859-1或Latin1,但如今,UTF-8通常用于新开发项目中。原因是Servlet规范说未指定Charset时,请暗示ISO-8859-1,但HTML 4.0建议UTF-8用于URL。

问题是URL由字节组成,并且在将其传递给应用程序之前,Servlet容器将其转换为Java字符,因此您必须在Servlet容器级别声明使用的Charset。出于兼容的原因,默认情况下,在第8.0版之前,众所周知的tomcat为URL假定了Latin1 Charset。由于8.0.0,默认值现在取决于"严格的servlet合规性"设置。当false

true时,是ISO-8859-1

参考:

  • 我应该假设URL中的编码字符在哪个字符中?
  • tomcat常见问题解答/角色编码

对于您的确切问题,您有两种正确处理é字符的方法:

  • 将您的servlet容器配置保持不变,并在ISO-8859-1中编码URL(é将为%E9
  • 坚持URL中的UTF-8,但将其声明为Servlet容器

最新更新