2013-03-23 4 views
2

사용자가 쿼리 문자열에서 묻는 내용에 따라 JSON 또는 XML로 데이터를 전달하는 C#으로 작성된 WCF 응용 프로그램이 있습니다. 바이트 순서 마커가없는 UTF-8 JSON 피드

Encoding utf8 = new System.Text.UTF8Encoding(false); 
return WebOperationContext.Current.CreateTextResponse(data, "application/json", utf8); 

나는 방법보다 사용하여 데이터를 전달

는 특수 문자가 모두 엉망이되어 여기에 데이터를 전달 내 코드의 빠른 조각이다. 그래서 차베스는 차베스처럼 보입니다. 반면에 BOM으로 위의 utf8 변수를 만들거나 enum (Encoding.UTF8)을 사용하면 특수 문자가 올바르게 작동합니다. 그렇지만 내 고객 중 일부는 API를 사용할 때 코드가 예외를 던지고 있다고 불평하고 있습니다. 이것은 물론 피드의 BOM 때문에 발생합니다. 피드에 BOM없이 특수 문자를 올바르게 표시 할 수있는 방법이 있습니까?

+0

콘텐츠 유형'application/json; charset = utf-8' 대신'application/json'을 사용 하시겠습니까? – I4V

+0

json에 대한 유일한 합법적 인 인코딩은 UTF-8이 사실상 표준 인 UTF-8/16/32입니다. – Esailija

답변

0

출력 결과가 정확하지만 ANSI 인코딩 된 텍스트를 표시하기 위해 사용하고있는 것은 무엇이든간에. Chávez는 Chávez를 UTF-8로 인코딩하고 라틴어 1 인 것처럼 해석합니다.

+0

브라우저에서이를보고 있으며 UTF8에서이를 예상하는 장치입니다. Chávez 만받는다면 BOM이 추가 될 때 왜 올바르게 표시됩니까? 감사. – Kenpachii

+0

웹 브라우저? Content-Type : text/xml과 같은 적절한 content-type 헤더를 보내야합니다. charset = utf-8'을 사용하여 UTF-8로 문서를 해석합니다. BOM을 보내면 브라우저의 자동 인코딩 탐지 알고리즘을 트리거 할 가능성이 큽니다. – Joni

+0

어떤 이유로, CreateTextResponse 메서드가 인코딩 유형을 사용하여 content-type 헤더를 추가 할 것으로 예상했습니다. 이 경우 contentType 매개 변수에 utf-8로 지정해야했습니다. 전체 콘텐츠 유형을 추가 한 후에 올바른 결과를 얻을 수있었습니다. – Kenpachii