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

Tomcat 9.0.63中REST接口传输ḗ字符被解析为?的问题求助

解决Tomcat 9.0.63中REST接口接收'ḗ'字符变为'?'的问题

核心原因及修复方案

1. 全局配置Tomcat请求编码

Tomcat默认请求编码为ISO-8859-1,无法支持ḗ这类Unicode字符,需修改server.xml的Connector配置:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true"/>
  • URIEncoding="UTF-8":统一GET请求参数编码
  • useBodyEncodingForURI="true":让POST请求体使用和URI相同的编码

2. 接口层面强制设置编码

若全局配置不生效,可在REST方法中显式指定请求编码:

@PostMapping("/your-api")
public ResponseEntity<?> processRequest(HttpServletRequest request) throws UnsupportedEncodingException {
    request.setCharacterEncoding("UTF-8");
    String content = request.getParameter("target-content");
    // 后续业务处理
}

3. 确保客户端请求编码正确

发送请求时,必须在Content-Type头中指定UTF-8编码:

Content-Type: application/json; charset=UTF-8

如果是表单提交,需添加accept-charset="UTF-8"属性。

4. 配置字符集过滤器

在项目的web.xml中添加字符集过滤器,强制所有请求使用UTF-8:

<filter>
    <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

5. 配置JVM启动参数

在Tomcat的启动脚本(catalina.sh/catalina.bat)中添加JVM参数,确保全局字符集为UTF-8:

# Linux/macOS
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

# Windows
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8

6. 验证数据库存储编码(若涉及持久化)

如果字符需要存入数据库,需确保:

  • 数据库表及字段编码为utf8mb4(支持全Unicode字符)
  • JDBC连接URL添加编码参数:jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:49:53