String.getBytes()需显式指定字符集,推荐用StandardCharsets常量(如UTF_8),避免默认编码不一致;旧版可用字符串名但需捕获UnsupportedEncodingException;禁用无参方法,解码须用相同字符集。

在 Java 中,String.getBytes() 方法可以将字符串按指定字符集编码为字节数组。关键是要**显式传入 Charset 对象或字符集名称字符串**,否则会使用平台默认字符集(不可靠且跨环境不一致)。
推荐方式:使用 Charset 标准常量(Java 7+)
最安全、清晰的方式是使用 StandardCharsets 中的预定义常量,例如:
-
"你好".getBytes(StandardCharsets.UTF_8)→ 返回 UTF-8 编码的 byte[] -
"café".getBytes(StandardCharsets.ISO_8859_1)→ 按 Latin-1 编码 -
"测试".getBytes(StandardCharsets.US_ASCII)→ 非 ASCII 字符会被替换为?(取决于 Charset 的编码策略)
兼容旧版本:传入字符集名称字符串
如果需支持 Java 6 或更早版本,可用字符串形式指定编码名(注意大小写不敏感,但建议用标准写法):
"Hello".getBytes("UTF-8")"Привет".getBytes("Windows-1251")- ⚠️ 此方式可能抛出
UnsupportedEncodingException,需 try-catch 处理
注意事项与常见误区
以下行为需特别留意:
立即学习“Java免费学习笔记(深入)”;
-
不要用无参
getBytes():它依赖系统默认编码(如 Windows 上可能是 GBK,Linux/macOS 上多为 UTF-8),极易导致乱码或数据损坏 -
编码过程不可逆(对部分字符):例如用 US_ASCII 编码含中文的字符串,会丢失信息(替换成
?或抛异常,取决于 Charset 实现) -
解码时必须用相同字符集:
new String(bytes, StandardCharsets.UTF_8)才能正确还原原始字符串 -
空字符串和 null 要分别处理:null 调用
getBytes()会抛NullPointerException
简单验证示例
可快速验证编码结果:
byte[] utf8 = "中".getBytes(StandardCharsets.UTF_8);// 结果为 [-28, -67, -96],即 UTF-8 中“中”的三字节表示


















