You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历java.nio.charset.StandardCharsets中的所有Charset?

遍历StandardCharsets中所有字符集的正确方式

问题描述

我正在编写一个Java测试类,想要遍历StandardCharsets类中定义的所有Charset,并用每种编码对myString变量执行.getBytes()方法。

我尝试了如下代码:

String myString = "Some Junk";

for (Charset encoding : StandardCharsets) {

    System.out.println("Using Encoding: " + encoding.displayName());
    byte[] newBytes = myString.getBytes(encoding);

    for (byte b : newBytes ) {
        System.out.print(b + " ");
    }
    System.out.println("");

}

显然这段代码不正确。除了手动逐个处理外,我该如何遍历StandardCharsets类中定义的所有Charset?


解决方案

StandardCharsets类中的字符集均为静态常量,无法直接像集合那样遍历,推荐两种实现方式:

方式一:通过反射自动获取所有静态字符集

利用反射读取StandardCharsets类的所有静态字段,筛选出Charset类型的实例,无需手动维护字符集列表:

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class CharsetTest {
    public static void main(String[] args) {
        String myString = "Some Junk";
        
        // 获取类的所有字段
        Field[] fields = StandardCharsets.class.getDeclaredFields();
        
        for (Field field : fields) {
            // 筛选静态且类型为Charset的字段
            if (Modifier.isStatic(field.getModifiers()) && field.getType() == Charset.class) {
                try {
                    Charset encoding = (Charset) field.get(null);
                    System.out.println("Using Encoding: " + encoding.displayName());
                    byte[] newBytes = myString.getBytes(encoding);
                    
                    for (byte b : newBytes) {
                        System.out.print(b + " ");
                    }
                    System.out.println();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

方式二:手动构建字符集列表(无反射)

如果不想使用反射,可以手动将StandardCharsets中定义的所有常量存入List后遍历,这种方式更直观,避免反射的潜在问题:

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;

public class CharsetTest {
    public static void main(String[] args) {
        String myString = "Some Junk";
        List<Charset> standardCharsets = List.of(
                StandardCharsets.UTF_8,
                StandardCharsets.UTF_16,
                StandardCharsets.UTF_16BE,
                StandardCharsets.UTF_16LE,
                StandardCharsets.ISO_8859_1,
                StandardCharsets.US_ASCII
        );
        
        for (Charset encoding : standardCharsets) {
            System.out.println("Using Encoding: " + encoding.displayName());
            byte[] newBytes = myString.getBytes(encoding);
            
            for (byte b : newBytes) {
                System.out.print(b + " ");
            }
            System.out.println();
        }
    }
}

内容的提问来源于stack exchange,提问作者AcidHawk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:10:43