登录
首页 >  文章 >  java教程

在Java中如何配置UTF-8编码环境_Java字符编码设置说明

时间:2026-01-23 08:48:15 372浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《在Java中如何配置UTF-8编码环境_Java字符编码设置说明》,这篇文章主要讲到等等知识,如果你对文章相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

IDEA项目需统一设为UTF-8编码:全局/项目/properties文件编码全设UTF-8,勾选透明转码;Maven中声明sourceEncoding;javac和java命令须显式指定-encoding UTF-8和-Dfile.encoding=UTF-8;文件读写必须显式指定Charset;Web端需配置Tomcat URIEncoding及Spring Boot编码强制策略。

在Java中如何配置UTF-8编码环境_Java字符编码设置说明

IDEA 项目默认编码设为 UTF-8

IntelliJ IDEA 默认可能使用系统编码(如 Windows 的 GBK),导致 String 字面量、读写文件、控制台输出乱码。必须统一设为 UTF-8,且需同时配置三处:

  • File Encoding:Settings → Editor → File Encodings → Global Encoding / Project Encoding / Default encoding for properties files → 全部选 UTF-8
  • Properties 文件编码:勾选 Transparent native-to-ascii conversion,否则 .properties 中的中文会被自动转成 \u4f60\u597d 形式,且运行时无法正确还原
  • Maven 编译编码:在 pom.xml 中显式声明,避免 javac 使用默认编码:
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

Java 源文件编译与运行时的 -encoding 参数

javacjava 命令本身不继承 IDE 编码设置,命令行编译/运行时若源码含中文,必须显式指定编码,否则会报错或乱码:

  • javac -encoding UTF-8 Main.java:编译阶段告诉编译器“这个 .java 文件是 UTF-8 写的”,否则它按系统默认编码(如 Windows CMD 是 IBM437)解析源码,直接报 非法字符
  • java -Dfile.encoding=UTF-8 Main:运行时设定 JVM 默认字符集,影响 new String(byte[])InputStreamReader 无参构造等隐式使用默认编码的操作
  • 注意:-Dfile.encoding 不影响 Charset.defaultCharset() 在某些 JDK 版本中的返回值(如 JDK 17+ 启动后不可变),但会影响大多数 I/O 类的默认行为

文件读写必须显式指定 Charset

依赖默认编码是最大隐患。以下操作看似简洁,实则危险:

  • Files.readString(path)Files.writeString(path, str)(Java 11+):底层调用 StandardCharsets.UTF_8 —— 这是特例,可安全使用
  • new FileReader(file) / new FileWriter(file):使用平台默认编码,绝对不要用
  • 正确写法:
    Files.readAllLines(path, StandardCharsets.UTF_8);
    Files.write(path, lines, StandardCharsets.UTF_8);
  • 流式读写:new InputStreamReader(inputStream, StandardCharsets.UTF_8)new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)

Servlet 与 Spring Boot 的请求/响应编码

Web 场景下,浏览器和服务器之间传输的是字节,编码错配会导致参数乱码、响应中文显示为 :

  • Tomcat 8.5+ 默认使用 UTF-8 解析 URL 和表单,但旧版本需在 server.xmlConnector 中加:URIEncoding="UTF-8"
  • Spring Boot 2.3+ 默认启用 server.servlet.encoding.force=true,强制请求/响应使用 UTF-8;若关闭或自定义,需配置:
    server:
      servlet:
        encoding:
          charset: UTF-8
          force: true
  • 手动处理请求体(如 HttpServletRequest.getInputStream())时,仍需用 new InputStreamReader(in, StandardCharsets.UTF_8),不能依赖 request.getCharacterEncoding() —— 它可能为 null

真正麻烦的不是设一次 UTF-8,而是每个 IO 边界(源码、编译、启动、文件、网络)都得确认是否被某个默认值悄悄覆盖。尤其 FileReader 和未设 -Dfile.encoding 的脚本,最容易在上线后才暴露。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>