我要做的是生成一个字符数组,表示某个ISO / IEC字符集中的某些ASCII值。假设,如果我在ISO / IEC 8859-7字符集的ASCII值211-217中出现问题,那么结果应该是{Σ,Τ,Υ,Φ,Χ,Ψ,Ω}。我试过这个:
for (int i = 211; i <= 217; i++) {
System.out.println(String.valueOf((char)i));
}
但结果基于默认的系统字符集。
答案 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));