java中string.getbytes应显式指定编码,推荐用standardcharsets.utf_8等常量;避免无参调用以防平台依赖导致乱码;还原字符串时须使用相同编码。

Java 中用 String.getBytes 指定编码转字节数组,核心是传入合法的字符集名称(如 "UTF-8")或 Charset 对象,避免使用无参重载(它依赖平台默认编码,不可靠)。
推荐方式:传入 Charset 对象(类型安全、不易出错)
这是最稳妥的做法,利用 StandardCharsets 工具类提供的常量,编译期可检查,不抛 UnsupportedEncodingException:
str.getBytes(StandardCharsets.UTF_8)-
str.getBytes(StandardCharsets.GBK)(Windows 中文环境常用) -
str.getBytes(StandardCharsets.ISO_8859_1)(常用于 HTTP Header 或兼容旧协议)
兼容老版本写法:传入编码名字符串(需处理异常)
Java 8 及之前版本若不能用 StandardCharsets,可用字符串形式,但必须捕获或声明 UnsupportedEncodingException:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
str.getBytes("UTF-8")—— 大多数场景可用,但拼写错误(如"utf8")会运行时报错 -
str.getBytes("GBK")—— 注意大小写不敏感,但建议统一用大写保持可读性 - 不要用
"GB2312"或"UTF8"这类非标准别名,部分 JDK 实现可能不支持
务必避免:无参 getBytes()
该方法使用 Charset.defaultCharset(),结果随 JVM 启动参数(-Dfile.encoding)和操作系统而变:
- 同一段代码在 Windows(默认 GBK)和 Linux(默认 UTF-8)上结果不同
- 网络传输、文件存储、加解密等场景极易因编码不一致导致乱码或解析失败
- 除非明确需要“当前环境默认”,否则一律显式指定
反向验证:用相同编码还原字符串
生成字节数组后,若需转回字符串,必须用**完全相同的编码**构造 new String(bytes, charset):
byte[] bs = str.getBytes(StandardCharsets.UTF_8);String restored = new String(bs, StandardCharsets.UTF_8); // ✅ 正确new String(bs, StandardCharsets.GBK); // ❌ 乱码,编码不匹配
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










