J'ai un service Web (ASMX) et une méthode Web qui fonctionne et génère une exception si l'entrée n'est pas valide.ASP.NET WebService renvoie des caractères gâchés lors du lancement d'exceptions
[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);
}
Retour en JavaScript côté client sur la page Web, la fonction de rappel d'erreur, j'afficher mon erreur:
function GetInputErrorCallback(error)
{
$get('input_error_msg_div').innerHTML = error.get_message();
}
Cela fonctionne très bien et quand mes déclarations de méthode Web (une chaîne) , ça a toujours l'air parfait. Toutefois, si l'un de mes messages d'erreur provenant d'une exception renvoyée contient un caractère spécial, il est affiché de manière incorrecte dans le navigateur. Par exemple, si le message d'erreur devait contenir les éléments suivants:
Cette entrée n'est pas valide! (c'est un ASCII # 146 là-dedans)
Il affiche ceci:
Cette entrée nâ € ™ t valide!
Ou:
Vous aimez Hüsker Dü? (ASCII # 252)
Devient:
Vous aimez Hüsker Dü?
Le contenu des messages d'erreur provient de fichiers XML avec encodage UTF-8:
<?xml version="1.0" encoding="UTF-8"?>
<ErrorMessages>
<Message id="invalid_input">Your input isn’t valid!</Message>
.
.
.
</ErrorMessages>
Et aussi loin que la page de codage concerne, dans mon web.config, j'ai:
<globalization enableClientBasedCulture="true" fileEncoding="utf-8" />
J'ai aussi un module HTTP pour définir les paramètres 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;
J'ai essayé disablin g ce module HTTP mais le résultat est le même.
Les valeurs renvoyées par le service Web (dans la variable l_errMsg) sont correctes dans le débogueur VS. C'est juste une fois que le script client est en attente, il s'affiche incorrectement. J'ai utilisé Firebug pour regarder la réponse et les personnages spéciaux sont également mutilés. Donc je trouve assez étrange que les chaînes renvoyées par ma méthode web semblent bien, même s'il y a des caractères spéciaux dans celles-ci. Pourtant, quand je lance une exception de la méthode web, les caractères spéciaux dans son message sont incorrects. Comment puis-je réparer cela?