2014-07-18 7 views
0

내 서버에서 JsonObject를 얻으려면 Android에서 Volley 라이브러리를 사용합니다.JsonObject에는 몇 가지 추가 문자가 있습니다

내가 PHP를

와 서버에 적절한 JSON을 만들 수 있지만 내가 서버에서 JSON을받을 때 이상한 문제 JSON을

를 생성하는 PHP에로 json_encode를 사용

enter image description here

메신저

발생

json 앞에서 추가 문자가 무엇인지 알 수 없습니까?

이 문제를 해결하는 방법을 알고 있습니까? 40 : 49.151 : System.err에/W (11,636) com.android.volley.ParseError : org.json.JSONException : 값

제가

로이드

07-18 (20)에있어 오류가 나는"? 유형 java.lang.String의 사전

+3

UTF BOM입니다. http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 – njzk2

+0

이 문제를 해결하는 방법을 알려주십시오. 이 인코딩을 어디에 설정해야합니까? –

+0

은 서버 또는 모바일 응용 프로그램에서 문제가됩니까? –

답변

0

에 감사

된 JSONObject

로 변환 할 수의 I는 주석으로이 게시 한 것입니다하지만 난 링크에 관련 코드를 게시하고 싶었다. 그것이 작동한다면, 끝내 알려주지 않으면 내가 (내가 그것을 테스트하지 않은) 이것을 제거합니다. Skip BOM

에서

는 "문제는 UTF-8 문자열이 존재하는 경우이 문자를 생략 할 수 있습니다. 우리는 우리의 JSON 파서를 수정해야 바이트 순서 표시 문자 (BOM) '0xFEFF이고'로 시작한다는 것입니다.

임시 해결책으로 InputStream에서 Reader로 이동할 때이 코드를 사용하여 BOM을 제거 할 수 있습니다. "

public Reader inputStreamToReader(InputStream in) throws IOException { 
    in.mark(3); 
    int byte1 = in.read(); 
    int byte2 = in.read(); 
    if (byte1 == 0xFF && byte2 == 0xFE) { 
     return new InputStreamReader(in, "UTF-16LE"); 
    } else if (byte1 == 0xFF && byte2 == 0xFF) { 
     return new InputStreamReader(in, "UTF-16BE"); 
    } else { 
     int byte3 = in.read(); 
     if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF) { 
     return new InputStreamReader(in, "UTF-8"); 
     } else { 
     in.reset(); 
     return new InputStreamReader(in); 
     } 
    } 
    } 

"아니면 파일에서 바이트 순서 표시를 제거 할 수 있습니다!"

관련 문제