2012-02-29 18 views
2

私は、javaJavaの文字セットのデコード問題

GB2312に含まれているこの文字を文字セットGB2312を使用して文字·を解読しようとしている、位置コードがa1a4check here

コードです:

public static void main(String[] _args) throws Exception { 
    String str="a1a4:· a5f6:ヶ a8c5:ㄅ";   
    ByteBuffer bf=readToByteBuffer(new ByteArrayInputStream(str.getBytes())); 
    System.out.println(Charset.forName("GB2312").decode(bf).toString()); 
} 
private static final int bufferSize = 0x20000; 
static ByteBuffer readToByteBuffer(InputStream inStream) throws IOException { 
    byte[] buffer = new byte[bufferSize]; 
    ByteArrayOutputStream outStream = new ByteArrayOutputStream(bufferSize); 
    int read; 
    while (true) { 
     read = inStream.read(buffer); 
     if (read == -1) 
      break; 
     outStream.write(buffer, 0, read); 
    } 
    ByteBuffer byteData = ByteBuffer.wrap(outStream.toByteArray()); 
    return byteData; 
} 

上記のコードは、出力結果:

a1a4:? a5f6:ヶ a8c5:ㄅ 

a1a4をデコードすることができない理由を私は理解していませんか?

+0

'IO.string2InputStream(d)'もGB2312文字セットを使って書き込みを行うと仮定します。バッファのバイトが正しいかどうかチェックしましたか? –

+0

@RussellZahniserごめんなさい、私の質問を編集しました。 – Koerr

+1

あなたはおそらく 'str.getBytes(" GB2312 ")'を実行したいと思います。デフォルトを使用しています。おそらくUTF8です。しかし、私はsehが文字エンコードではなく文字の問題であることは間違いないと思います。 –

答えて

2

私のブラウザでは、dの文字列のうち、0xB7としてエンコードされた第5文字はMIDDLE DOTであり、KATAKANA MIDDLE DOTではありません。しかし、あなたが言及した同じデータベースによると、コードポイントis not available in the GB2312 character set。同様に、MIDDLE DOTでも0xB7でもないyou can seeは、GB2312の一部としてリストされています。

ここでの問題は、入力文字列の文字であり、JREが提供するCharsetDecoderの文字ではないと思います。

関連する問題