Java中字符串转字节数组须显式指定编码,推荐用StandardCharsets.UTF_8等常量调用getBytes(Charset);禁用无参getBytes()以防平台默认编码导致乱码;还原时需严格匹配原编码。

Java 中将字符串转换为指定编码的字节数组,核心是调用 String.getBytes(Charset) 或 String.getBytes(String charsetName) 方法。关键在于显式指定编码,避免依赖平台默认编码导致乱码。
使用 Charset 类(推荐)
更安全、类型明确的方式是传入 java.nio.charset.Charset 实例:
- 用
StandardCharsets.UTF_8、StandardCharsets.GBK等标准常量(JDK 7+) - 避免硬编码字符串名称,防止拼写错误或运行时异常
示例:
String str = "你好,world"; byte[] utf8Bytes = str.getBytes(StandardCharsets.UTF_8); byte[] gbkBytes = str.getBytes(StandardCharsets.GBK);
使用编码名称字符串(需处理异常)
传入编码名(如 "UTF-8"、"GBK")时,必须捕获 UnsupportedEncodingException:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 该异常是受检异常,编译器强制要求处理
- 实际中标准编码名基本都支持,但代码仍需 try-catch 或声明抛出
示例:
try {
byte[] bytes = str.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8 not supported", e);
}
注意:不要依赖 getBytes() 无参重载
str.getBytes() 使用系统默认编码(由 file.encoding 或操作系统决定),行为不可控:
- 同一段代码在 Windows(默认 GBK)和 Linux(默认 UTF-8)上结果不同
- 极易引发跨环境乱码,调试困难
- 所有涉及网络传输、文件存储、数据库交互的场景都应显式指定编码
反向操作:字节数组还原为字符串
对应地,用 new String(byte[], Charset) 安全还原,且必须使用与编码时**完全一致**的 Charset:
- 用错编码(如用 UTF-8 解 GBK 编码的字节)必然产生乱码或异常字符
- 建议与编码时共用同一个 Charset 常量,避免不一致
示例:
byte[] data = ...; // 来自 UTF-8 编码的字节数组 String s = new String(data, StandardCharsets.UTF_8); // 必须匹配

















