2011-01-28 5 views
5

이것은 어둠 속에있는 장면입니다.이 질문이 광인의 말처럼 들리는 경우 사전에 사과드립니다.C#, UTF-8 및 인코딩 문자

타사와의 통합의 일환으로 C#을 사용하여 일부 문자열 정보를 UTF8로 인코딩해야 멀티 파트 양식을 통해 대상 서버로 보낼 수 있습니다. 문제는 내가 제출 한 내용 중 일부를 거부하고 있다는 것입니다. 이유는 콘텐츠를 올바르게 인코딩하지 않기 때문입니다.

지금 당장은 대시 또는 하이픈 (보고있는 것만 알 수 없음)이 대상 서버에 의해 수신되거나 해석되는 것을 확인하려고합니다 (예, 그렇습니다. 5 자리의 문자열이며 브라우저에서 문제가되지 않습니다). 그리고 불행히도 바이트 배열을 사용하여 문제가있는 곳을 식별하기 시작하는 방법을 알고 싶다면 Encoding.UTF8.GetBytes()에 대해 충분히 이해하지 못했습니다.

누군가가 조언이나 조언을 제공 할 수 있다면, 크게 감사하겠습니다. 지금까지 나의 유일한 친구는 MSDN이었고 그 중 하나는 그다지 많지 않았습니다.

UPDATE 1는 : - "%를 E2의 % 80 % 94"로를 인코딩 진수 몇 가지 이상의 주변 굴착 후, I는 System.Web.HttpUtility.UrlEncode()를 사용하여 엠 DASH 문자 ("") 인코딩하는 것을 발견했다.

"application/x-www-form-urlencoded"콘텐츠 유형으로 HttpWebRequest 게시물에이 정보를 보내고 있습니다. 문제의 원인이 될 수 있습니까? 그렇다면 UTF-8 요청을 기대하는 서버가 이해할 수 있도록 값에 유니 코드 문자가 포함될 수있는 일련의 이름 - 값 쌍을 인코딩하는 올바른 방법은 무엇입니까?

+0

그 결과 나는 utf8 인코딩 결과를 ascii로 인코딩 한 것 같아요. – Joshua

+0

잘못된 인코딩을 사용해도 1 문자 대시가 5 문자 시퀀스로 변환 될 가능성은 거의 없습니다. 그것은 아마도 인코딩 문제 일뿐입니다. –

+0

@ Joshua : 나는 당신이 문제의 핵심에 가깝다고 생각합니다. 방금 추가 정보가 담긴 원본 게시물의 업데이트를 추가했습니다. –

답변

3
byte[] test = System.Text.Encoding.UTF8.GetBytes("-"); 

test[0] = 0x2D (45 as integer). 

당신이 대상 서버에 0x2D를 전송하는지 확인 주어야한다.

+1

Wireshark는 이러한 종류의 물건에 유용합니다. – Marlon

+0

필자는 Wireshark를 한번도 사용해 본 적이 없지만, 우리의 수석 개발자는 Fiddler에 대해 매우 숙련되어 있습니다. 나는 사무실에 돌아 오자마자이 사진을 줄 것이다. 팁을 주셔서 감사합니다. –

+0

Wireshark는 설치가 매우 간단합니다. 그것은 당신이 어떤 패킷이 당신의 서버로 들어오는지를 볼 수있게합니다. 여러 가지 방법으로 데이터를 필터링하여 데이터가 손실되지 않도록 할 수 있습니다. – Chauncat

1

Content-Type 헤더에 "charset = utf-8"매개 변수를 추가해야 할 수도 있습니다. 인코딩을 설정하려면 Content-Encoding 헤더가 있어야 할 수도 있습니다. 헤더는 다음을 포함해야합니다.

Content-Type : multipart/form-data; charset = utf-8

그렇지 않으면 웹 서버는 바이트를 UTF-8 바이트로 인식하지 못하기 때문에 잘못 해석합니다.

+0

멀티 파트 양식을 보낼 때 현재 컨텐트 인코딩 유형을 명시 적으로 정의하지 않는다는 점에서 맞습니다. 방금 제 3 자에게 이메일을 보내서 기본 콘텐츠 유형이 무엇인지 알았습니까? 쉽게 식별 할 수있는 콘텐츠인가요? Microsoft 서버 (IIS)를 실행하고 있다고 생각합니다. –

+0

'UTF-8 '은 [유효한'Content-Encoding '값이 아닙니다.] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11). 이 헤더는 페이로드가 압축되는 방법을 나타내는 데 사용됩니다. 그것은 charset을 나타내는 데 사용되지 않습니다. – dkarp

+0

@dkarp가 옳습니다. – Jacob