推荐优先使用 StandardCharsets 而非字符串名指定编码,因其提供编译期安全、免异常、防拼写错误的预定义 Charset 实例;常用如 UTF_8(跨平台首选)、ISO_8859_1(HTTP 头)、US_ASCII(协议标识)等。

Java 中使用 StandardCharsets 指定字符编码,是推荐且最安全的方式——它直接提供预定义的、不可变的 Charset 实例,避免了字符串拼写错误和 UnsupportedEncodingException 异常。
为什么优先用 StandardCharsets 而不是字符串名?
传统方式如 "UTF-8" 字符串传参(例如 new String(bytes, "UTF-8"))存在两个隐患:一是拼写错误(如写成 "UTF8" 或 "utf-8" 小写在某些旧环境可能失败),二是必须捕获或声明 UnsupportedEncodingException。而 StandardCharsets.UTF_8 是编译期常量,类型安全、无需异常处理、性能更好。
常用 StandardCharsets 常量及对应场景
核心常量包括:
-
StandardCharsets.UTF_8:Web、API、跨平台文本首选,支持所有 Unicode 字符 -
StandardCharsets.ISO_8859_1:单字节编码,常用于 HTTP 头、表单默认编码(如Content-Type) -
StandardCharsets.US_ASCII:严格 0–127 字符集,适合协议头、基础标识符 -
StandardCharsets.UTF_16和StandardCharsets.UTF_16BE/UTF_16LE:需明确字节序时使用(如解析二进制协议)
典型用法示例(不抛异常、不字符串硬编码)
以下操作全部基于 StandardCharsets,无异常声明,语义清晰:
立即学习“Java免费学习笔记(深入)”;
- 字节数组转字符串:
new String(bytes, StandardCharsets.UTF_8) - 字符串转字节数组:
str.getBytes(StandardCharsets.UTF_8) - 读取文件(配合
Files):Files.readString(path, StandardCharsets.UTF_8)(Java 11+) - 写入文件:
Files.writeString(path, content, StandardCharsets.UTF_8) - 构建
InputStreamReader:new InputStreamReader(in, StandardCharsets.UTF_8) - HTTP 客户端设置编码(如 OkHttp):
RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"))中 charset 名仍为字符串,但实际解析时应统一用StandardCharsets.UTF_8处理内容
注意事项
虽然 StandardCharsets 覆盖主流编码,但它不包含 GBK、GB2312、Shift_JIS 等非标准或地区性编码。如需使用这些,仍需通过 Charset.forName("GBK") 获取,并自行处理异常;不过应尽量避免,优先推动系统统一使用 UTF-8。


















