如何获取由特定字符集的一系列ASCII值表示的字符?

时间:2012-09-13 19:07:48

标签: java character-encoding

我要做的是生成一个字符数组,表示某个ISO / IEC字符集中的某些ASCII值。假设,如果我在ISO / IEC 8859-7字符集的ASCII值211-217中出现问题,那么结果应该是{Σ,Τ,Υ,Φ,Χ,Ψ,Ω}。我试过这个:

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

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

2 个答案:

答案 0 :(得分:4)

您无法直接将特定编码的单个字符代码转换为char,因此您需要使用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)));
} 

编辑:使用上面给出的输出格式,您可以确保按ISO-8859-7的指定正确解码Unicode代码点。如果您仍然看到?而不是字符,那么输出就会出现问题 - 您的控制台不支持这些字符。

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

答案 1 :(得分:1)

你的问题并不完全清楚。我想你的意思是你有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));