0

私がやろうとしているのは、特定のISO/IEC文字セットで特定のASCII値を表す文字の配列を生成することです。たとえば、ISO / IEC 8859-7文字セットのASCII値211-217に関心がある場合、結果は{Σ、Τ、Υ、Φ、Χ、Ψ、Ω}になります。私はこれを試しました:

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

ただし、結果はデフォルトのシステム文字セットに基づいています。

4

2 に答える 2

4

個々の文字コード、特にエンコーディングを直接sに変換することはできないため、代わりにを使用して変換charする必要があります。ISO-8859-7はシングルバイトエンコーディングであるため、各文字コードは1つに対応します。byte[]Stringbyte

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コードポイントが正しくデコードされていることを確認できます。それでも?文字の代わりにsが表示される場合は、出力に問題があります。コンソールはこれらの文字をサポートしていません。

の結果を確認してくださいSystem.getProperty("file.encoding")-それはある種のUnicode(UTF-8など)である必要があります。IDEからコードを実行する場合は、コンソールエンコーディング設定の構成を確認してください。

于 2012-09-13T19:13:34.723 に答える
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));
于 2012-09-13T19:14:53.130 に答える