在 Java 中,String 本身不存编码,它内部始终以 UTF-16 表示字符。
所谓“编码转换”,实际上是 String ↔ byte[] 之间的转换,通过指定字符集(Charset)完成。
String -> byte[] : 编码(encode)
byte[] -> String : 解码(decode)
String str = "中文";
// 转 UTF-8
byte[] utf8 = str.getBytes(StandardCharsets.UTF_8);
// 转 GBK
byte[] gbk = str.getBytes("GBK"); // 可能抛异常,推荐用 StandardCharsets
⚠️ 不推荐:
str.getBytes(); // 使用平台默认编码,不可控
byte[] data = ...;
// UTF-8 解码
String s1 = new String(data, StandardCharsets.UTF_8);
// GBK 解码
String s2 = new String(data, "GBK");
⚠️ 编码和解码必须一致,否则会乱码。
String str = "你好";
byte[] utf8 = str.getBytes(StandardCharsets.UTF_8);
String gbkStr = new String(utf8, StandardCharsets.UTF_8);
byte[] gbk = gbkStr.getBytes("GBK");
或更直接:
byte[] gbk = str.getBytes("GBK");
// 假设原本是 GBK 编码的字节
byte[] gbkBytes = ...;
// 错误方式(用 UTF-8 解码)
String wrong = new String(gbkBytes, StandardCharsets.UTF_8);
// 修复
byte[] fix = wrong.getBytes(StandardCharsets.UTF_8);
String right = new String(fix, "GBK");
import java.nio.charset.StandardCharsets;
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
String s = new String(bytes, StandardCharsets.UTF_8);
| 名称 | 说明 |
|---|---|
| UTF-8 | 最通用 |
| GBK | 中文 Windows |
| ISO-8859-1 | 老系统 |
| UTF-16 | Java 内部 |
Java 的编码转换 = String 和 byte[] 之间的 charset 指定
如果你有具体场景(文件、HTTP、数据库、Socket),我可以给你更针对性的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。