核心是全程显式指定utf-8编码:读写文件须用fileinputstream→inputstreamreader(standardcharsets.utf_8)和fileoutputstream→outputstreamwriter(standardcharsets.utf_8),禁用依赖平台默认编码的filereader/filewriter。

用 UTF-8 编码处理多国语言混合文本,核心是“全程显式指定”,不能依赖默认值。Java 内部用 Unicode,但 IO 流本身不带编码信息,必须在字节与字符转换环节主动声明 UTF-8。
文件读写:明确构造 InputStreamReader/OutputStreamWriter
FileReader/FileWriter 使用平台默认编码(Windows 是 GBK,Linux/macOS 多为 UTF-8),极易出错。正确做法是绕过它们,用字节流 + 指定编码的字符流包装器:
- 读取:用 FileInputStream → InputStreamReader(UTF-8) → BufferedReader
- 写入:用 FileOutputStream → OutputStreamWriter(UTF-8) → BufferedWriter
- 示例代码中必须传入 StandardCharsets.UTF_8,而非字符串 "UTF-8"(避免拼写错误或异常)
网络请求与响应:HTTP 头 + 字符流双保险
仅设置 response.setContentType("text/html;charset=UTF-8") 不够——它只告诉浏览器怎么解码,服务端内部仍可能用错编码读取请求体:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对请求:调用 request.setCharacterEncoding("UTF-8")(需在获取参数前执行)
- 对响应:除 setContentType 外,建议再加 response.setCharacterEncoding("UTF-8")
- 若用 HttpClient 等客户端发请求,需手动设置 Content-Type: text/plain; charset=utf-8 请求头
数据库交互:连接参数 + 表结构同步约束
即使 Java 端用了 UTF-8,数据库若用 Latin1 或 GBK,存取过程仍会二次转码:
- JDBC URL 必须包含 useUnicode=true&characterEncoding=UTF-8(MySQL)或对应驱动的等效参数
- 数据库、表、字段的字符集需设为 utf8mb4(MySQL 推荐,兼容 emoji 和所有 Unicode 字符)
- 避免用 Statement.execute("INSERT...") 直接拼 SQL 插入中文——应使用 PreparedStatement 绑定参数,由驱动自动处理编码
IDE 与构建配置:从源头统一默认编码
源码文件本身若保存为 GBK,编译时就会出错,后续运行再怎么转码也无力回天:
- IDE(如 IntelliJ)中全局设为 UTF-8,并勾选“Transparent native-to-ascii conversion”防止 Properties 文件乱码
- Maven 项目在 pom.xml 中声明:
UTF-8 - 启动 JVM 时加参数 -Dfile.encoding=UTF-8,覆盖系统默认编码(尤其 Windows 环境下必要)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










