2013-08-21 5 views
3

일부 인코딩 문자를 디코딩하는 데 문제가 있습니다. 내가 해독 할 필요가 무엇 내가 같은 문자열을 가지고,이 % E9입니다이 D % E9bardeur 및 degr % E9 난 내 자바 클래스에서 무엇을 은 다음과 같다 :이 작업 후utf8에 % E9 디코딩 실패

try 
     { 
     System.out.println(o);// test 
     o = URLDecoder.decode((String) o, "UTF-8"); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
     e.printStackTrace(); 
     } 

을, 내가 얻을 수있다

D�bardeur and degr� 

내가 UTF-8

어떤 조언을 디코딩 해달라고 할 때 똑같은 일이? thx

답변

4

% E9는 UTF-8이 아닙니다.

이 될 것이라고 디코딩하는 올바른 방법 : %E9으로

URLDecoder.decode((String) o, "ISO-8859-1") 
1

, 당신은 E9를 16 진수 평가하여 문자열의 바이트가 의미 할 수 있었다? 그렇기 때문에 플래그는 UTF-8에서 "멀티 바이트"로 플래그를 지정하며, 뒤 따르는 2 개의 "연속 바이트"(정확한 범위 내)가 있습니다.

때문에 UTF-8은 가변 길이 인코딩이며, 기억, 그래서 몇 가지 코드 포인트 (문자 값)은 문자열이있는 경우

당신이 등을있어, 1 바이트로 2, 3에 의해 일부 표현된다 UTF-8 및 E9으로 처리되면 다음 2 바이트가 올바른 범위에 있어야합니다.

http://hexutf8.com/?q=0x640x650x670x720xe90x00

여기 올바른 2 바이트 뒤에 E9 스트링의 예이다 :

예를 들어, E9 뒤에 문자열, 00, 유효한 연속 바이트 아니다 http://hexutf8.com/?q=0xc20xa90xe90x810xaa

그리고 적절한 문자가 표시됩니다.