2014-10-03 2 views
0

컬을 통해 URL을 내 API에 제출할 때 몇 가지 문제가 있습니다. 테스트에 사용하는 ur 매개 변수는 & body = + % bb % 3d +이며 gms 및 id의 특수 문자 집합에 '~'이 (가) 있다고 가정합니다. 내가 값을 인쇄 할 때API에 데이터를 제출할 때 GSM 확장 문자 인코딩 문제가 발생합니다.

나는

지금 나는 그것이 UTF-8 문자로 설정하고 유니 코드 대체 문자가 대체지고 이유를 먹으 렴하지 알고 '='얻을.

대체를 사용하지 않고 데이터를 내 서버로 가져 오는 방법이 있어야합니다. 부두와 저지를 사용하여 자바 프로젝트를 실행 중입니다.

--- 편집 ---

내가 데이터를 출력합니다

@GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String submit(@QueryParam("from") String from, @QueryParam("to") String to, @QueryParam("body") String body) { 
     byte[] raw = body.getBytes(StandardCharsets.US_ASCII); 
     body = new String(raw, StandardCharsets.UTF_8); 
     System.out.println("data - " + body); 

시도 좋아

- = ISO_8859_1에 US_ASCII에서 문자 집합을 변경 아웃 출력 데이터 - =

+0

요청에 어떤 문자 인코딩을 사용하고 있습니까? 어떤 문자 인코딩을 사용 하시겠습니까? –

+0

예상되는 문자는 ASCII 문자입니다. curl에 다음 헤더를 추가합니다. Content-Type : application/x-www-form-urlencoded; charset = US-ASCII. – Ernie

+0

내게 더 명확하게 알리자, 나는 늘어진 gsm 문자 또는 그리스 문자를 기대한다. – Ernie

답변

1

HTTP 사양에 따라 권장되는 문자 인코딩은 UTF-8이므로 그 결과를 얻는 이유는 무엇입니까? 귀하의 코드는 RFC2616의 약간 알려진 동작에 의존 할 수 있습니다. 즉, 인코딩이 없다면 ISO-8859-1이라고 가정합니다. 나중에 달리 명시되지 않는 한 어디서나 RFC7231에 RFC 7231에 명시된대로 폐기됩니다.

매개 변수를 구문 분석 할 때 다른 인코딩을 원할 경우 요청 개체에서 추출 할 때 설정하거나 UTF8을 사용하십시오.

예는 :

/* will decode all parameters, header values, and content as ISO-8859-1 */ 
request.setCharacterEncoding(StandardCharsets.ISO_8859_1.name()); 
String actual = request.getParameter("body"); 
System.out.println("\"" + actual + "\""); 

/* output on console of : " »= " */ 
/* that's a RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK followed by an EQUALS */ 

당신이의 UTF8 동등한를 사용하려면

다음 use %C2%BB%3D

옵션 # 2, 사후 원시 매개 변수를 디코딩.

String raw = request.getParameter("body"); 
byte[] bytes = raw.getBytes(StandardCharsets.ISO_8859_1); // decode 
String actual = new String(bytes, StandardCharsets.UTF_8); 

업데이트 # 1 : 2013 - 10 월 03

당신이 US-ASCII가 올바른 설정할 때보고 된 결과.

%bb은 US-ASCII의 7 비트 제한을 초과하므로 대체 문자로 표시됩니다.

예 자바 :

// as us-ascii 
    String decoded = URLDecoder.decode("+%bb%3d+",StandardCharsets.US_ASCII.name()); 
    System.out.printf("Decoded: '%s'%n",decoded); 

업데이트 # 1 : 2013 - 10 월 03 GSM 문자 집합에 대해서는

, 내가 찾을 수있는 내장으로 GSM의 자바 지원 문자 세트를 사용하려면 Charsets, Encoding 등에서 뼈대를 만들고 싶다면 UTF-8 또는 ISO-8859-1을 사용하는 Java 용 타사 라이브러리를 살펴보십시오. 50 개의 발표 된 GSM 문자셋 중 하나로 번역 할 수 있습니다.(단 1 GSM 문자셋 지정의)

예 :

http://embeddedfreak.wordpress.com/2008/10/08/java-gsm-0338-sms-character-set-translator/

또는 당신은 (문자로)를 online UTF-8 Tool로 팝업, 원하는 UTF-8 문자를 발견하고 그것을 역 추적 할 수 있습니다 당신이 사용하는 16 진 코드 포인트.

+0

본문이 조회 매개 변수로 전달된다. 하지만 서버에서 % bb가 대체 문자로 바뀌 었습니다 – Ernie

+0

UTF-8이 필요합니다. "\ u00bb \ u003d"를 ~ – Ernie

+0

% c2 % bb % 3d로 바꾸십시오. outputs = – Ernie

관련 문제