2017-12-11 21 views
2

16進数の値を実際の名前にデコードしようとしていますが、問題が発生しています。utf-8エンコーディングを使用して16進数値をデコードするJava

21043D0438043C043E043A04は、СНИМОКにデコードする必要があります。 現在のコード私は

String test = "21043D0438043C043E043A04"; 
byte[] bytes = Hex.decodeHex(test.toCharArray());    
String a = new String(bytes, "UTF-8"); 

を使用していますが、私はいくつかの非常に奇妙な結果を取得しています。

utf8バイトとしても試してみましたが、うまくいきませんでした。

byte[] bytesone = test.getBytes(Charset.forName("UTF-8")); 
String b = new String(bytesone, Charset.forName("UTF-8")); 
byte[] bytes = Hex.decodeHex(b.toCharArray());    
String a = new String(bytes, "UTF-8"); 

事前

+0

テキストをエンコードするコードを表示できますか? –

+0

悲しいことに、これらの値をファイルに入れています – machekj

+0

'Hex'はどのクラスですか? – Thomas

答えて

4

\u0421はキリル文字Сですので、コードはUTF-16LE(リトルエンディアン)のようです。

String a = new String(bytes, "UTF-16LE"); 
String a = new String(bytes, StandardCharsets.UTF_16LE); 
+0

すぐにありがとう!不思議なことに私は今、??????コンソールで – machekj

+0

hmm実際に働いて、助けてくれてありがとう – machekj

+1

コンソールはおそらくOSに依存し、そのエンコードはキリル文字のスクリプトを処理できません。表現できないUnicodeコードポイントは、プレースホルダーに変換されます。 –

3

のおかげでは、これはより多くのUTF-16LEのように見えます。

+0

ジョシュ、ありがとう? ?????ターミナルで。 – machekj

+0

hmm実際に働いた、あなたの助けをありがとう – machekj

関連する問題