Java setCharacterEncoding方法未使用iso-8859-15正确编码特殊字符

Java setCharacterEncoding方法未使用iso-8859-15正确编码特殊字符,java,servlets,character-encoding,Java,Servlets,Character Encoding,我有一个简单的表单提交流,请求者将在Servlet接收之前抛出过滤器。在my doFilter方法中,第一行本身使用iso-8859-15设置字符编码,如下所示 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException { servletRequest.setCharacterEncoding("iso

我有一个简单的表单提交流,请求者将在Servlet接收之前抛出过滤器。在my doFilter方法中,第一行本身使用iso-8859-15设置字符编码,如下所示

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException {
    servletRequest.setCharacterEncoding("iso-8859-15"); //encoding setting
在我的请求对象中,我有一个名为“name”的参数,其值为“1Depósito”(即国际语言特殊字符)。参数值修改一次setCharacterEncoding方法执行。参数值编码为“1Depósito”而不是“1Depósito

在我的参数值中,我们有一个特殊字符“ó”(即ASCII代码243),因此它没有正确编码,但我相信iso-8859-15支持“ó”字符,那么为什么它没有正确编码呢

在我的请求头中,字符集显示为UTF-8

因此,在我的过滤器中,如果我将编码从“iso-8859-15”
更改为“UTF-8”,那么它可以正常工作,但我需要使用“iso-8859-15”,只是因为相同的代码在我的另一个tomcat构建中工作

注意:

  • 1) 迁移到Spring Boot并在tomcat-->上运行,这里iso-8859-15编码正确应用,即使输入请求字符集为“UTF-8”
  • 2) 正常WebLogic构建-->此处iso-8859-15编码未正确应用,即使输入请求字符集为“UTF-8”
  • fiddler中,我调试了传入的we请求,并观察到两个请求(Tomcat和WebLogic)的字符集没有差异(即内容类型:application/x-www-form-urlencoded;字符集=UTF-8)
请确认is“iso-8859-15”是否支持字符?如果是,那么为什么编码不起作用

期待您的宝贵意见

谢谢,
BSK

请求以
UTF-8
的形式传入。这就是为什么在强制将
ISO-8559-15
作为编码时会得到该结果。客户端已决定向您发送UTF-8数据,因此强制将其发送到其他内容只会损坏这些值。“我只需要使用iso-8859-15”是什么意思?谢谢您的快速评论。那么你是指UTF-8中的请求内容,所以编码必须是UTF-8?我需要使用iso-8859-15,这意味着我不想在后端/服务器端更改代码。我的意思是请求已经在
UTF-8
中,在您试图更改它的地方更改它已经太晚了。您或者需要修改发送数据的任何内容的编码,例如向表单添加
accept charset
属性,或者只按原样接受数据。我的意思是,如果您不尝试更改请求的编码,它就可以工作,不是吗?当你开始摆弄编码的时候它才坏了。谢谢Kayaman。是的,在我的请求头中,我可以看到以下值,因此请求以UTF-8格式内容类型接收:application/x-www-form-urlencoded;charset=UTF-8,因此根据您的输入,在提交之前更改HTML表单中的charset,或者不在服务器端应用任何其他编码。我认为您的前提是不正确的,因为特殊字符“ó”对“iso-8859-15”有效。存在于许多字符集中,显然包括Unicode。UTF-8是Unicode的编码。浏览器和服务器似乎都能很好地处理UTF-8。在Java字符串中,编码是UTF-16。据推测,它具有您需要的价值。你想解决什么问题?