2017-06-29 20 views
0

GB2312文字セットを使用してエンコードされた値を取得しようとしていますが、以下は"GB2312"のJavaエンコーディングCHARACTER®を疑問符(?)に置き換えます

"®「の代わりには私のサンプルコードです:

new String("Test ®".getBytes("GB2312")); 

が、私はテストを取得していますか?テスト®の代わりに

誰かがこの問題に直面しましたか?

Javaのバージョン - JDK6

プラットフォーム:Window 7

私は中国の文字エンコーディングを認識していないよので提案を必要としています。

よろしく、

マヘシュ

+1

おそらく®はGB2312でエンコードできないので、 '?'に変換されます。 'Charset.forName(" GB2312 ")の結果を見てください。newEncoder()。canEncode("® ")' –

+0

カルロスに感謝します。 – mahesh

+0

実際には、それは可能な動作です、私の答えを参照してください –

答えて

0

より良く理解するために、二つの部分に分かれ声明:

byte[] bytes = "Test ®".getBytes("GB2312"); // bytes, encoding the string to GB2312 
new String(bytes); // back to string, using default encoding 

はおそらく®は、有効なGB2312の文字はないので、それが?に変換されます。

この文字列が与えられた文字セットでエンコードすることができない、このメソッドの動作は不定です:documentation of getBytesに基づいて

Charset.forName("GB2312").newEncoder().canEncode("®") 

の結果を参照してください。 CharsetEncoderクラスは、エンコーディング処理をより詳細に制御する必要がある場合に使用します。

CharsetEncoderも示唆しています。

関連する問題