You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript原样向Java传递HTML签名及特殊符号处理

解决特殊符号™、®的编码/乱码问题

我之前也踩过类似的特殊符号编码坑,给你梳理下问题根源和对应的解决办法:

问题1:编码后%被转为%25

这是重复URL编码搞的鬼。比如你手动用encodeURIComponent("value™")得到了value%E2%84%A2,但如果你的HTTP请求框架(比如Axios、jQuery.ajax)或者后端服务器又自动对请求参数做了一次URL编码,就会把%再编码成%25,最终变成value%25E2%84%A2,后端解析自然就不对了。

解决办法:

  • 优先让请求库自动处理:大部分现代HTTP库(比如Axios)默认会用UTF-8编码参数,直接传递原始字符串就行,比如params: { key: "value™" },不用手动编码。
  • 如果必须手动编码,要确保后端不会二次编码:比如后端是Spring Boot,检查是否有重复编码的配置;或者后端接收时用URLDecoder.decode(param, "UTF-8"),但注意不要重复解码。

问题2:直接传递未编码的字符到Java变成乱码

这是前后端字符编码不一致导致的。前端发送请求时用UTF-8编码,但后端没配置成UTF-8来解析请求参数,字节流被错误解码就会出现乱码。

解决办法:

后端(Java)配置

  • Spring Boot项目:在application.properties里添加强制UTF-8编码的配置:
    server.servlet.encoding.force=true
    server.servlet.encoding.charset=UTF-8
    server.servlet.encoding.enabled=true
    
  • 传统Servlet项目:在web.xml中配置编码过滤器:
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • 手动兜底解码:如果上面的配置没生效,获取参数时可以手动转码(Tomcat默认用ISO-8859-1解析参数):
    String rawParam = request.getParameter("key");
    String decodedParam = new String(rawParam.getBytes("ISO-8859-1"), "UTF-8");
    

前端注意事项

  • 确保页面编码是UTF-8:在HTML头部加<meta charset="UTF-8">。
  • 发送POST请求时,确认请求头包含Content-Type: application/x-www-form-urlencoded; charset=UTF-8(大部分请求库会自动处理,手动写AJAX时要留意)。

快速验证方案

用Postman直接发送参数key=value™,如果后端能正常解析,说明问题大概率出在前端的编码逻辑或者后端的编码配置上,针对性调整即可。


内容的提问来源于stack exchange,提问作者Navneet Mathpal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:58