2012-04-27 2 views
2

Java 및 .Net 앱용 서버 인 Ruby on Rails 애플리케이션이 있습니다. 일부 데이터를 보낼 때 사용하는 사용자 정의 헤더가 있지만이 데이터가 Ruby on Rails 응용 프로그램에 도달하면 레일스는 UTF-8 값을 읽습니다. 은 유효한 UTF-8 문자열이이 아닙니다. 이 도달하면HTTP 요청의 헤더 값에 사용되는 텍스트 인코딩은 무엇입니까?

DEBUG [main] (DefaultClientConnection.java:268) - >> POST /ze/api/files.json HTTP/1.1 
DEBUG [main] (DefaultClientConnection.java:271) - >> X-Replica: JÜRGENELITE-HP 
DEBUG [main] (DefaultClientConnection.java:271) - >> Authorization: Basic bWxpbmhhcmVzOjEyMzQ1Njc4 

DEBUG [main] (DefaultClientConnection.java:271) - >> Content-Length: 0 
DEBUG [main] (DefaultClientConnection.java:271) - >> Host: localhost:3000 
DEBUG [main] (DefaultClientConnection.java:271) - >> Connection: Keep-Alive 
DEBUG [main] (DefaultClientConnection.java:271) - >> User-Agent: Apache-HttpClient/4.1.2 (java 1.5) 

을하지만 : 예를 들어

, 내가 JÜRGENELITE-HP를 보내는 경우 내가 얻을 :

는 는
#<ActiveRecord::StatementInvalid: PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xdc52 
: SELECT * FROM "replicas" WHERE ("replicas"."identification" = 'J?RGENELITE-HP') AND ("replicas".user_id = 121) LIMIT 1> 

자바 HTTP 클라이언트 라이브러리는 명확 콘솔에 정확하게 데이터를 인쇄 레일이 깨졌습니다. HTTP가 헤더 값을 인코딩하는 데 사용하는 인코딩은 무엇입니까?

+1

당신은 [여기 솔루션]을 활용할 수 있습니다 (http://stackoverflow.com/questions/1361604/how-to-encode-utf8-filename-for-http-headers-python-django) 당신이하려는 일을 해결하기 위해. –

+1

[여기도 좋은 답변입니다.] (http://stackoverflow.com/questions/324470/http-headers-encoding-decoding-in-java) –

답변

2

US-ASCII

당신이 RFC2616의 2.2 절을 보면 :

2.2

다음과 같은 규칙이
이 규격 전반에 걸쳐 사용되는 기본 규칙 기본 구문 분석 구조를 설명 . US-ASCII 코드화 문자 세트
은 ANSI X3.4-1986 [21]에 의해 정의됩니다.

OCTET   = <any 8-bit sequence of data> 
    CHAR   = <any US-ASCII character (octets 0 - 127)> 
    UPALPHA  = <any US-ASCII uppercase letter "A".."Z"> 
    LOALPHA  = <any US-ASCII lowercase letter "a".."z"> 
    ALPHA   = UPALPHA | LOALPHA 
    DIGIT   = <any US-ASCII digit "0".."9"> 
    CTL   = <any US-ASCII control character 
        (octets 0 - 31) and DEL (127)> 
    CR    = <US-ASCII CR, carriage return (13)> 
    LF    = <US-ASCII LF, linefeed (10)> 
    SP    = <US-ASCII SP, space (32)> 
    HT    = <US-ASCII HT, horizontal-tab (9)> 
    <">   = <US-ASCII double-quote mark (34)> 

섹션의 나머지 부분은 헤더와 프로토콜의 다른 요소에 대한보다 구체적인 정보가 있습니다.

모든 BNF 정의를 찾으려면 사양을 뛰어 넘어야합니다. 4.2 절은하지만, 헤더에 대한 정의를 포함

message-header = field-name ":" [ field-value ] 
    field-name  = token 
    field-value = *(field-content | LWS) 
    field-content = <the OCTETs making up the field-value 
        and consisting of either *TEXT or combinations 
        of token, separators, and quoted-string> 

TEXT는 2.2 절에서 다시 정의됩니다

TEXT   = <any OCTET except CTLs, 
        but including LWS> 
관련 문제