2017-12-11 5 views
2

실제 16 진수 값을 디코딩하려고하는데 문제가 있습니다.Java는 utf-8 인코딩을 사용하여 16 진수 값을 디코드합니다.

21043D0438043C043E043A04는 СНИМОК로 디코딩되어야합니다. 내가

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

을 사용하고하지만 난 꽤 이상한 결과를 얻고있다 현재 코드입니다.

utf8 바이트로 시도했지만 작동하지 않았습니다. 사전

+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와 인코딩이 다르며 키릴 문자 스크립트를 처리 할 수 ​​없습니다. 표현할 수없는 유니 코드 코드 포인트는 자리 표시 자로 변환됩니다. –

3

에서

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"); 

덕분에이 UTF-16LE 같은 더 보인다.

+0

조쉬, 지금 받고 있니? ????? 터미널에. – machekj

+0

흠 실제로 일했습니다, 도와 주셔서 감사합니다 – machekj

관련 문제