在 Linux 下 Swagger 页面出现乱码,通常不是 Swagger 本身的问题,而是字符编码、HTTP 响应头或文件本身编码不一致导致的。下面按常见原因给你逐一排查。
现象
???çç 这种乱码原因
LANG 不是 UTF‑8Content-Type 没带 charset=utf-8解决
✅ 检查 Linux 语言环境
locale
如果不是 UTF-8,建议设置:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
✅ Spring Boot 示例(强制 UTF‑8)
server:
tomcat:
uri-encoding: UTF-8
spring:
http:
encoding:
charset: UTF-8
enabled: true
force: true
打开浏览器开发者工具 → Network → 找到 swagger-resources 或 /v2/api-docs
如果这里已经乱码,说明问题在后端序列化,不是 Swagger UI。
常见原因
ISO-8859-1StringHttpMessageConverter 且未指定 UTF‑8✅ Spring MVC 解决方式
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
StringHttpMessageConverter converter =
new StringHttpMessageConverter(StandardCharsets.UTF_8);
converters.add(0, converter);
}
}
现象
原因
charset✅ Nginx 配置
charset utf-8;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding "";
}
如果你用的是 swagger.yaml 或 openapi.yaml:
file swagger.yaml
如果是:
ISO-8859 text
✅ 转换为 UTF‑8:
iconv -f ISO-8859-1 -t UTF-8 swagger.yaml -o swagger_utf8.yaml
现象
✅ Dockerfile 示例
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
或在 docker run 时:
docker run -e LANG=en_US.UTF-8 ...
你可以按顺序检查:
locale 是否为 UTF‑8/v2/api-docs 是否 UTF‑8Content-Type: application/json; charset=utf-8你可以贴出:
我可以直接给你精确到配置项的解决方案。