如何获取由特定字符集的ASCII值范围表示的字符



我要做的是生成一个字符数组,这些字符表示某些ISO/IEC字符集中的某些ASCII值。比方说,如果我对ISO/IEC 8859-7字符集的ASCII值211-217感兴趣,那么结果应该是{∑,¦Α,¦Β,Φ,¦Γ,Ψ,Ω}。我试过这个:

for (int i = 211; i <= 217; i++) {
    System.out.println(String.valueOf((char)i));
}

但是结果是基于默认的系统字符集。

您无法将特定编码中的单个字符代码直接转换为chars,因此需要使用byte[]String的转换。由于ISO-8859-7是单字节编码,每个字符代码对应一个byte:

Charset cs = Charset.forName("ISO-8859-7");
for (int i = 211; i <= 217; i++) {
    String s = new String(new byte[] { (byte) i }, cs)
    System.out.println(
        String.format("Character %s, codepoint %04X", s, (int) s.charAt(0)));
} 

EDIT:使用上面给出的输出格式,您可以确保按照ISO-8859-7的规定正确解码Unicode代码点。如果您仍然看到?s而不是字符,则输出有问题——您的控制台不支持这些字符。

检查System.getProperty("file.encoding")的结果-它应该是某种Unicode(UTF-8等)。如果您从IDE运行代码,请检查其配置中的控制台编码设置。

您的问题并不完全清楚。我想你的意思是你有ISO-8859-7–编码字符,并且您希望将它们转换为Java字符(即UTF-16–编码的Unicode点)。

在这种情况下,试试这个:

byte[] encoded = new byte[7];
for (int e = 211; e <= 217; ++e) 
  encoded[e - 211] = (byte) e;
String s = new String(encoded, "ISO-8859-7");
for (int idx = 0; idx < s.length(); ++idx) 
  System.out.println(s.charAt(idx));

最新更新