优先使用 StandardCharsets 是因为其类型安全、编译期校验、避免拼写错误和运行时异常;如 StandardCharsets.UTF_8 用于 Web/API/文件存储,而 "UTF-8" 字符串方式易错且需处理 UnsupportedEncodingException。

Java 中使用 StandardCharsets 是最安全、最推荐的指定字符编码方式,它避免了字符串编码名拼写错误和运行时异常(如 UnsupportedEncodingException),因为所有常量都是编译期确定的 Charset 实例。
为什么优先用 StandardCharsets 而不是字符串?
过去常用 "UTF-8" 这样的字符串传给 String.getBytes("UTF-8") 或 new String(bytes, "UTF-8"),但这种方式有隐患:
- 字符串拼错(比如写成
"UTF8"或"utf-8")会导致运行时报UnsupportedEncodingException - 需要显式处理受检异常,代码冗余
-
StandardCharsets.UTF_8是 final 静态常量,类型安全、零开销、无需异常处理
常用 StandardCharsets 常量及对应场景
核心常量包括:
-
StandardCharsets.UTF_8:Web、API、文件存储首选,兼容性好,支持全部 Unicode 字符 -
StandardCharsets.ISO_8859_1:常用于 HTTP 头、表单默认编码(如application/x-www-form-urlencoded) -
StandardCharsets.US_ASCII:仅限纯 ASCII 场景(如协议头、简单标识符),不支持中文等扩展字符 -
StandardCharsets.UTF_16/StandardCharsets.UTF_16BE/StandardCharsets.UTF_16LE:需明确字节序时使用(如与某些二进制协议交互)
实际用法示例
替换旧写法,直接传入常量:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
// ✅ 推荐:无异常、类型安全、可读性强
String text = "你好,World!";
byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);
String restored = new String(utf8Bytes, StandardCharsets.UTF_8);
// 文件读写(配合 Files 工具类)
List<String> lines = Files.readAllLines(Paths.get("data.txt"), StandardCharsets.UTF_8);
Files.write(Paths.get("out.txt"), lines, StandardCharsets.UTF_8);
// ❌ 避免:抛异常、易拼错、运行时风险
byte[] bad = text.getBytes("UTF-8"); // 可能抛 UnsupportedEncodingException
String s = new String(bytes, "utf8"); // 拼错 → 运行时报错
注意边界情况
虽然 StandardCharsets 覆盖主流编码,但仍有局限:
- 不包含 GBK、GB2312、Big5 等中文平台遗留编码(需用
Charset.forName("GBK"),但要注意异常和 JVM 支持) - 所有常量均为“标准”编码,不含 BOM 处理逻辑(如需写带 UTF-8 BOM 的文件,得手动添加
0xEF, 0xBB, 0xBF) - 网络传输中(如 HTTP)仍需按协议约定设置编码,
StandardCharsets只负责 Java 层编解码

















