Charset.forName()是Java中根据名称获取Charset对象的静态方法,用于显式指定UTF-8、GBK等编码,支持大小写不敏感的规范名称,需配合getBytes()/String构造器使用,并建议校验或try-catch处理非法名称。

Charset.forName() 是 Java 中用于根据名称获取 Charset 对象的静态方法,常用于显式指定字符编码(如 UTF-8、GBK、ISO-8859-1),尤其在字符串编解码、IO 流处理或网络传输中控制编码行为。
获取常用编码集的实例
直接传入标准编码名称字符串即可,注意大小写不敏感,但推荐使用规范大写形式:
-
UTF-8:
Charset charset = Charset.forName("UTF-8"); -
GBK(中文 Windows 常用):
Charset charset = Charset.forName("GBK"); -
ISO-8859-1(单字节拉丁编码):
Charset charset = Charset.forName("ISO-8859-1"); -
US-ASCII:
Charset charset = Charset.forName("US-ASCII");
配合字符串编码/解码使用
获取 Charset 后,可传给 String.getBytes(Charset) 或 new String(byte[], Charset) 确保编码一致:
- 编码为指定字节数组:
byte[] bytes = "你好".getBytes(Charset.forName("UTF-8")); - 按指定编码还原字符串:
String s = new String(bytes, Charset.forName("UTF-8"));
安全调用:捕获 UnsupportedEncodingException
虽然 Charset.forName() 不抛受检异常(Java 7+),但传入非法名称会抛 IllegalArgumentException。建议校验或兜底:
- 可用
Charset.isSupported("UTF-8")预判是否支持 - 生产环境建议加 try-catch,例如:
try {<br> Charset cs = Charset.forName(encodingName);<br>} catch (IllegalArgumentException e) {<br> // 处理不支持的编码名,如回退到 UTF-8<br>}
与变量动态绑定的典型场景
当编码名来自配置、用户输入或 HTTP Header 时,需用变量传入:
String encodingFromConfig = "UTF-8"; // 可能来自 properties 或 JSONCharset charset = Charset.forName(encodingFromConfig.trim());- 建议 trim() 去空格,并检查非空:
if (encodingFromConfig != null && !encodingFromConfig.trim().isEmpty())











