문제

나는 web 서비스(ASMX)및에서 그것은,웹 방법는 몇 가지 작업을 수행하고 예외가 발생한 경우 입지 유효합니다.

[ScriptMethod]
[WebMethod]
public string MyWebMethod(string input)
{
    string l_returnVal;

    if (!ValidInput(input))
    {
        string l_errMsg = System.Web.HttpUtility.HtmlEncode(GetErrorMessage());
        throw new Exception(l_errMsg);
    }

    // some work gets done...

    return System.Web.HttpUtility.HtmlEncode(l_returnVal);
} 

에 다시 클라이언트 측에서 자바스크립트는 웹 페이지에 오류가 콜백 함수,나는 나의 디스플레 오류가:

function GetInputErrorCallback(error)
{
    $get('input_error_msg_div').innerHTML = error.get_message();
}

이 때 나 웹 방법을 반환(문자열),항상 완벽한 모습을 보여줍니다.그러나,하나의 오류 메시지에서 내 던져 예외에 포함되는 특별한 문자,그것의 잘못 표시됩니다.예를 들면,오류 메시지가 있었다 포함하는 다음과 같다:

는 입력 유효하지 않습니다! (는 ASCII#146 가)

그것이 표시됩니다:

는 입력 isn’t 새롭고 독특한 방법을 제공합니다.

또:

당신은 다음과 같 Hüsker Dü? ASCII(#252)

가:

당신은 다음과 같 Hüsker Dü?

콘텐츠의 오류 메시지에서 온 XML 파일을 UTF-8 인코딩:

<?xml version="1.0" encoding="UTF-8"?>
<ErrorMessages>
   <Message id="invalid_input">Your input isn’t valid!</Message>
   .
   .
   .
</ErrorMessages>

지금까지와 같은 페이지를 인코딩이에서,관련 내 Web.config,가:

<globalization enableClientBasedCulture="true" fileEncoding="utf-8" />

나는 또한 HTTP 모듈을 설정하 L10n 매개변수:

Thread.CurrentThread.CurrentUICulture = m_selectedCulture;
Encoding l_Enc = Encoding.GetEncoding(m_selectedCulture.TextInfo.ANSICodePage);
HttpContext.Current.Response.ContentEncoding = l_Enc;
HttpContext.Current.Request.ContentEncoding = l_Enc;

나는 기능을 사용하지 않도록 노력했 이 HTTP 모듈 하지만 결과는 동일합니다.

반환되는 값에 의하여 웹 서비스(에 l_errMsg 변수)보다 잘에 대 debugger.그것은 한 번만 클라이언트 스크립트의 파악,그것이 올바르게 표시되지 않습니다.나는 사용 방화를 보면 응답고 특별한 문자는 망가지에 있고,너무합니다.그래서 나는 그것을 찾을 예쁜 이상하는 문자열을 반환에 의해 나 웹 방법을 잘 보이도 있는 경우에 특별한 문자들.아직 때 나는 예외를 웹에서 방법,특수 문자 메시지가 잘못되었습니다.어떻게 이 문제를 해결할 수 있을까요?

도움이 되었습니까?

해결책

당신은 확실 설정"fileEncoding"당신이 무엇을 원하지 않"responseEncoding"?설정 fileEncoding 는 방법을 결정하는 웹 서버를 읽으려고 물리적입니다.asmx/.aspx 디스크에서 파일을 때 그것을 결정할 수 없 인코딩 자동으로 합니다.그래서,설정에 이를"utf-8"의 의미를 저장해야 합니다 모두.asmx/.aspx 파일에 utf-8 입니다.나는 생각하지 않는 것은 타당하지만.

서 엉망으로 당신이 볼 때는 텍스트로 인코딩에 utf-8 분석을 사용하는 8 비트 인코딩(i.eutf-8 바이트 스트림을 해독을 사용하는 8 비트의 암호해독기와 같은,당신의 경우,iso-8859-1/Windows-1252).그래서 그것을 가능하 HtmlEncode()할을 하기 전에 던져()ing 예외에 대한 잘못된 출력을 인코딩이 있습니다.그래서 무엇이 일어나지 않는 경우 HtmlEncode()이 오류 메시지가?

(기술적으로,"ASCII#252"아마추;ASCII 에는 128 개의 문자;아포스트로피를 사용하이에서 오는 8 비트 인코딩 등에서,당신의 경우,iso-8859-1/Windows-1252.)

당신은 당신을 사용하는 HTTP 모듈을 올바르게?이 선을 보인 그것과 같은 문제의 원인일 수 있습니다:

HttpContext.Current.Response.ContentEncoding = l_Enc;

...때문에 그것은 가장 가능성 설정 출력을 인코딩하는 8 비트 인코딩(ANSI 코드 페이지에 해당).

을 지원하는 많은 문화 가능한 설정해야 합 응답이 인코딩에 utf-8 을 얻을 수 있습니다. 이것이 가장 지원되는 유니코드 형식으로 브라우저에서(I 습 모든 현대적인 브라우저 지원)고 유니코드는 유일한 대안을 로 인코딩.는 말했다,저는 완전히 이해할 수 없는 무엇 HTTP 모듈을 사용하고 당신이 그것을 필요로하는 이유는,그래서 상황보다 더욱 복잡할 수 있습 나는 생각한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top