2009-05-09 4 views

답변

3

당신은 HTTP POST 요청의 기본 인코딩이 ISO-8859-1 말했듯이. 그렇지 않으면 Content-Type: application/x-www-form-urlencoded; charset=UTF-8처럼 보일 수있는 Content-Type 헤더를 살펴 봐야합니다.

게시 된 데이터를 바이트 배열로 읽은 후에는이 버퍼를 문자열로 변환 할 수 있습니다 (.NET의 모든 문자열은 UTF-16 임). 인코딩을 알아야 할 때가 바로 그 순간입니다.

byte[] buffer = ReadFromRequestStream(...) 
string data = Encoding 
       .GetEncoding("DETECTED ENCODING OR ISO-8859-1") 
       .GetString(buffer); 

그리고 귀하의 질문에 대답하기 :

암 바이트 배열로 주어진 HTTP 요청을 디코딩하는 유니 코드를 사용하는 것이 내가 할 수 있습니까?

유니 코드이 바이트 배열 인코딩하는 데 사용 된 경우 예,

:

string data = Encoding.UTF8.GetString(buffer); 
0


대용량의 데이터 스트리밍이 예상되면 비동기 적으로 처리하는 것이 가장 좋은 방법입니다.

string myUrl = @"http://somedomain.com/file"; 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(myUrl); 

//Set some reasonable limits on resources used by this request 
request.MaximumAutomaticRedirections = 4; 
request.MaximumResponseHeadersLength = 4; 
request.Timeout = 15000; 

response = (HttpWebResponse)request.GetResponse();        

Stream receiveStream = response.GetResponseStream(); 
Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 

StreamReader readStream = new StreamReader(receiveStream, encode); 

Char[] read = new Char[512]; 

// Reads 512 characters at a time. 
int count = readStream.Read(read, 0, 512); 

while (count > 0) 
{ 
    // Dumps the 512 characters on a string and displays the string. 
    String str = new String(read, 0, count); 
    count = readStream.Read(read, 0, 512); 
} 
+0

죄송합니다.이 코드는 웹 리소스에서 요청하고 응답을 디코딩하는 코드입니다. 나는 나의 질문을 분명히해야한다고 생각한다. UTF-8로 뭔가를하고 있습니다 ... HTTP 요청을 디코딩하기 위해 사용할 수 있습니까? –

1

을 당신은 유니 코드 인코딩을 사용하여 인코딩되지 않은 무언가를 디코딩하는 유니 코드 인코딩을 사용하지 않는 한 그 않을 것 모든 문자를 올바르게 디코딩하십시오.

은 올바른 인코딩을위한 Encoding 객체를 생성하고 사용하는 :

Encoding iso = Encoding.GetEncoding("iso-8859-1"); 
string request = iso.GetString(requestArray); 
+0

도움이됩니다. 하지만 제 경우에는 다음과 같습니다 : 'www.responseHeaders.TryGetValue ("AUTHOR", out sAuthor); sName = HttpUtility.UrlDecode (sName); 인코딩 iso = Encoding.GetEncoding ("iso-8859-1"); –

+0

@SubtleFox : 올바른 결과를 얻으려면이 작업을 수행해야하는 경우 잘못된 인코딩을 사용하여 데이터를 디코딩하면 'sAuthor'문자열이 만들어집니다. 시작하기.이렇게하면 신뢰할 수있는 방법으로 문제를 해결할 수 없으며 일부 문자가 첫 번째 잘못된 디코딩에서 손실 될 수 있습니다. 문자열이 처음으로 디코딩 된 곳에서 해결해야하며 나중에 수정하지 않아야합니다. – Guffa

0

때마다 외부 표현 (예 : TCP 소켓) 및 내부 Unicode 형식 (또는 다른 방법 사이.NET 전송 정보 주위), 인코딩의 일부 양식이 관련되어 있습니다.

조엘의 기사 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)을 참조하여 utf-8-vs-unicode, 특히 Jon Skeet's 답을 참조하십시오.

+0

Joel의 기사가 ASCII를 사용하는 것보다는 Encoding에 대해 생각하기에 가장 좋은 이유였습니다. p –

+0

UTF-8 또는 UTF-16이 유니 코드가 아닙니다. – gimel