2009-02-20 7 views
0

Je développe un service Web basé sur le service Web asmx ASP.Net. La fin du serveur va répondre octet [] au client codé en UTF-8, et le client pour convertir le byte [] en chaîne. Ma confusion est, le caractère de la livre d'Angleterre au côté du serveur (je vider juste avant que la réponse Http est écrit, et le caractère du côté serveur est correct pour être livre sterling) sera reçu comme ?? du côté client.Problème de codage de réponse de service Web

Des idées quel est le problème? Je suppose que c'est un problème de codage, mais je n'ai aucune idée de comment déboguer plus loin et tous les paramètres (paramètres du proxy de service Web client?) Qui auront un impact?

merci à l'avance, George

Voici la partie d'en-tête que je suis arrivé de Fiddler.

HTTP/1.1 200 OK Date: Ven 20 février 2009 16:51:30 GMT serveur: Microsoft-IIS/6.0 cache-control: no-cache Pragma: no-cache X-Powered- par: ASP.NET X-réSEAU-Version: 2.0.50727 Cache-Control: private Content-type: text/xml Content-Length: 22752

xml version = "1.0" encoding = "UTF- de 8 "

+0

voir aussi: http://stackoverflow.com/questions/10221051/asmx-web-service-using-wrong-encoding-on-incoming-request – fungchou

Répondre

1

La première chose à faire est de renifler ce qui est réellement envoyé, en termes de en-têtes, la déclaration XML et les octets formant le texte lui-même. Est bon en tant que proxy HTTP, ou vous pouvez utiliser WireShark pour renifler au niveau du réseau. Une fois que vous avez ces trois bits d'information (l'en-tête Content-Type, la déclaration XML et les octets constituant le signe dièse), si vous mettez à jour votre réponse, nous verrons ce que nous pouvons faire. Cela semble bizarre, car ASP.NET obtient juste tout ce droit.

À quoi ressemble votre code client? S'agit-il simplement du code client normal du service Web .NET?

EDIT: Essayez de trouver un affichage binaire (vidage hexadécimal) dans Fiddler afin que vous puissiez trouver les octets.

Cependant, je soupçonne fortement que le problème est simplement de jeter le résultat à la console. Voici un peu de code à utiliser pour vider les points de code unicode:

static void DumpString (string value) 
{ 
    foreach (char c in value) 
    { 
     Console.Write ("{0:x4} ", (int)c); 
    } 
    Console.WriteLine(); 
} 

Je pense que vous verrez une 00A3 dans la sortie, qui est l'Unicode pour le signe dièse. Cela signifie que la chaîne a bien atteint votre client - mais l'écrire sur la console échoue.

+0

Je viens d'utiliser Fiddler et posté la réponse. Des idées, gourou? :-) – George2

+0

J'ai trouvé dans Fiddler, le contenu est correctement affiché en livre sterling, mais dans la valeur de retour de chaîne que j'ai eu, le contenu est ?? (Je le jette à la console et voir ??). – George2

+0

Je trouve le signe du dollar américain pourrait être affiché correctement. Cela signifie-t-il que l'encodage par défaut UTF-8 ne fonctionne pas pour la livre sterling mais fonctionne pour le dollar américain? :-) – George2

Questions connexes